Path: blob/master/site/ko/lite/android/acceleration_service.md
25118 views
Androidμ© κ°μ μλΉμ€(λ² ν)
λ² ν: Androidμ© κ°μ μλΉμ€λ νμ¬ λ² ν λ²μ μ λλ€. μμΈν λ΄μ©μ μ΄ νμ΄μ§μ κ²½κ³ μ¬ν λ° μ¬μ© μ½κ΄ λ° κ°μΈ μ 보 μ·¨κΈ λ°©μΉ¨ μΉμ μ μ°Έμ‘°νμΈμ.
νλμ¨μ΄ κ°μμ μν΄ GPUλ NPU λλ DSPμ κ°μ νΉμ νλ‘μΈμλ₯Ό μ¬μ©νλ©΄ μΆλ‘ μ±λ₯(κ²½μ°μ λ°λΌ μ΅λ 10λ°° λΉ λ₯Έ μΆλ‘ )κ³Ό ML μ§μ Android μ ν리μΌμ΄μ μ μ¬μ©μ κ²½νμ ν¬κ² ν₯μμν¬ μ μμ΅λλ€. λ€λ§ μ¬μ©μκ° λ³΄μ ν νλμ¨μ΄μ λλΌμ΄λ²μ μ’ λ₯κ° λ€μνκΈ° λλ¬Έμ κ° μ¬μ©μμ κΈ°κΈ°μ λ§λ μ΅μ μ νλμ¨μ΄ κ°μ ꡬμ±μ μ ννλ κ²μ μ½μ§ μμ μ μμ΅λλ€. λν κΈ°κΈ°μμ μλͺ»λ ꡬμ±μ νμ±ννλ©΄ μ§μ° μκ°μ΄ κΈΈμ΄μ§ μ μμΌλ©°, λλ¬Όμ§λ§ νλμ¨μ΄ λΉνΈνμ±μΌλ‘ μΈν΄ λ°νμ μ€λ₯κ° λ°μνκ±°λ μ νμ± λ¬Έμ λ‘ μΈν΄ μ¬μ©μ κ²½νμ΄ μ νλ μ μμ΅λλ€.
Androidμ© κ°μ μλΉμ€λ λ°νμ μ€λ₯ λλ μ νμ± λ¬Έμ μ μνμ μ΅μννλ ννΈ ν΄λΉ μν©μμ μ¬μ©μ κΈ°κΈ° λ° .tflite
λͺ¨λΈμ λ§λ μ΅μ μ νλμ¨μ΄ κ°μ ꡬμ±μ μ νν μ μλλ‘ λμμ£Όλ APIμ
λλ€.
κ°μ μλΉμ€λ TensorFlow Lite λͺ¨λΈλ‘ λ΄λΆ μΆλ‘ λ²€μΉλ§ν¬λ₯Ό μ€ννμ¬ μ¬μ©μ κΈ°κΈ°μ λ€μν κ°μ ꡬμ±μ νκ°ν©λλ€. μ΄λ¬ν ν μ€νΈλ μΌλ°μ μΌλ‘ λͺ¨λΈμ λ°λΌ λͺ μ΄ λ΄μ μλ£λ©λλ€. μΆλ‘ μκ° μ μ λͺ¨λ μ¬μ©μ κΈ°κΈ°μμ λ²€μΉλ§ν¬λ₯Ό ν λ² μ€ννκ³ κ²°κ³Όλ₯Ό μΊμν λ€ μΆλ‘ μ€μ μ¬μ©ν μ μμ΅λλ€. μ΄λ¬ν λ²€μΉλ§ν¬ μμ μ νλ‘μΈμ€μλ λ³κ°λ‘ μ€νλλ―λ‘ μ±μ΄ μΆ©λν μνμ΄ μ€μ΄λλλ€.
λͺ¨λΈ, λ°μ΄ν° μν, μμ μΆλ ₯("golden" μ λ ₯ λ° μΆλ ₯)μ μ 곡νλ©΄ κ°μ μλΉμ€κ° λ΄λΆ TFLite μΆλ‘ λ²€μΉλ§ν¬λ₯Ό μ€ννμ¬ νλμ¨μ΄ κΆμ₯ μ¬νμ μλ €μ€λλ€.
κ°μ μλΉμ€λ Androidμ μ¬μ©μ μ μ ML μ€νμ μΌλΆμ΄λ©° Google Play μλΉμ€μ TensorFlow Liteλ‘ μλν©λλ€.
νλ‘μ νΈμ μ’ μμ± μΆκ°νκΈ°
μ ν리μΌμ΄μ μ build.gradle νμΌμ λ€μ μ’ μμ±μ μΆκ°ν©λλ€.
κ°μ μλΉμ€ APIλ Google Play μλΉμ€μ μλ TensorFlow Liteμ ν¨κ» μλν©λλ€. μμ§ Play μλΉμ€λ₯Ό ν΅ν΄ μ 곡λλ TensorFlow Lite λ°νμμ μ¬μ©νκ³ μμ§ μλ€λ©΄ μ’ μμ±μ μ λ°μ΄νΈν΄μΌ ν©λλ€.
κ°μ μλΉμ€ API μ¬μ© λ°©λ²
κ°μ μλΉμ€λ₯Ό μ¬μ©νλ €λ©΄ λ¨Όμ λͺ¨λΈ νκ°μ μ¬μ©ν κ°μ ꡬμ±μ μμ±ν©λλ€(μ: OpenGLμ μ¬μ©νλ GPU). κ·Έλ° λ€μ λͺ¨λΈ, μΌλΆ μν λ°μ΄ν° λ° μμ λͺ¨λΈ μΆλ ₯μΌλ‘ κ²μ¦ ꡬμ±μ μμ±ν©λλ€. λ§μ§λ§μΌλ‘ validateConfig()
λ₯Ό νΈμΆνμ¬ κ°μ ꡬμ±κ³Ό κ²μ¦ ꡬμ±μ λͺ¨λ μ λ¬ν©λλ€.
κ°μ κ΅¬μ± μμ±νκΈ°
κ°μ ꡬμ±μ μ€ν μκ° λμ λ리μλ‘ λ³νλλ νλμ¨μ΄ ꡬμ±μ ννμ λλ€. κ°μ μλΉμ€λ λ΄λΆμ μΌλ‘ μ΄λ¬ν ꡬμ±μ μ¬μ©νμ¬ ν μ€νΈ μΆλ‘ μ μνν©λλ€.
νμ¬ κ°μ μλΉμ€λ₯Ό μ¬μ©νλ©΄ GpuAccelerationConfigλ₯Ό μ¬μ©νμ¬ GPU ꡬμ±(μ€ν μκ° λμ GPU λ리μλ‘ λ³νλ¨)κ³Ό CPU μΆλ‘ (CpuAccelerationConfig μ¬μ©)μ νκ°ν μ μμ΅λλ€. μ ν¬λ νμ¬ λ€λ₯Έ νλμ¨μ΄μ μ‘μΈμ€ν μ μλ λ λ§μ λ리μλ₯Ό μ§μνκ³ μ λ Έλ ₯νκ³ μμ΅λλ€.
GPU κ°μ ꡬμ±
λ€μκ³Ό κ°μ΄ GPU κ°μ ꡬμ±μ μμ±ν©λλ€.
λͺ¨λΈμ΄ μμνλ₯Ό μ¬μ©νλμ§ μ¬λΆλ setEnableQuantizedInference()
λ‘ μ§μ ν΄μΌ ν©λλ€.
CPU κ°μ ꡬμ±
λ€μκ³Ό κ°μ΄ CPU κ°μμ μμ±ν©λλ€.
setNumThreads()
λ©μλλ₯Ό μ¬μ©νμ¬ CPU μΆλ‘ μ νκ°νλ λ° μ¬μ©ν μ€λ λ μλ₯Ό μ μν μ μμ΅λλ€.
κ²μ¦ κ΅¬μ± μμ±νκΈ°
κ²μ¦ ꡬμ±μ μ¬μ©νμ¬ κ°μ μλΉμ€μμ μΆλ‘ μ νκ°νλ λ°©λ²μ μ μν μ μμ΅λλ€. μ μν μΆλ‘ νκ° λ°©λ²μ ν©κ²© μ¬λΆ κ²°μ μ μ¬μ©νκ² λ©λλ€.
μ λ ₯ μν
μμ μΆλ ₯
μ νμ± κ²μ¦ λ‘μ§
λͺ¨λΈμ μ±λ₯μ΄ μ’μ κ²μΌλ‘ μμλλ μ λ ₯ μν("golden" μνμ΄λΌκ³ λ ν¨)μ μ 곡ν΄μΌ ν©λλ€.
λ€μκ³Ό κ°μ΄ CustomValidationConfig.Builder
λ₯Ό μ¬μ©ν΄ ValidationConfig
λ₯Ό μμ±ν©λλ€.
setBatchSize()
λ₯Ό μ¬μ©νμ¬ golden μνμ κ°μλ₯Ό μ§μ ν©λλ€. setGoldenInputs()
λ₯Ό μ¬μ©νμ¬ golden μνμ μ
λ ₯μ μ λ¬ν©λλ€. setGoldenOutputs()
λ₯Ό μ¬μ©νμ¬ μ λ¬λ μ
λ ₯μ λν μμ μΆλ ₯μ μ 곡ν©λλ€.
μ΅λ μΆλ‘ μκ°μ setInferenceTimeoutMillis()
(κΈ°λ³Έκ° 5000ms)λ‘ μ μν μ μμ΅λλ€. μ μν μκ°λ³΄λ€ μΆλ‘ μκ°μ΄ κΈΈμ΄μ§λ©΄ ꡬμ±μ΄ κ±°λΆλ©λλ€.
μ νμ μΌλ‘ λ€μκ³Ό κ°μ΄ μ¬μ©μ μ μ AccuracyValidator
λ₯Ό μμ±ν μλ μμ΅λλ€.
μμ μ μ¬μ© μ¬λ‘μ μ ν©ν μ ν¨μ± κ²μ¬ λ‘μ§μ μ μν΄μΌ ν©λλ€.
κ²μ¦ λ°μ΄ν°κ° μ΄λ―Έ λͺ¨λΈμ μλ² λλμ΄ μλ κ²½μ° EmbeddedValidationConfig
λ₯Ό μ¬μ©ν μ μμ΅λλ€.
κ²μ¦ μΆλ ₯ μμ±νκΈ°
Golden μΆλ ₯μ μ ν μ¬νμ΄λ©°, golden μ
λ ₯μ μ 곡νκΈ°λ§ νλ©΄ κ°μ μλΉμ€μμ λ΄λΆμ μΌλ‘ golden μΆλ ₯μ μμ±ν μ μμ΅λλ€. λν setGoldenConfig()
λ₯Ό νΈμΆνμ¬ μ΄λ¬ν golden μΆλ ₯μ μμ±νλ λ° μ¬μ©νλ κ°μ ꡬμ±μ μ μν μλ μμ΅λλ€.
κ°μ κ΅¬μ± κ²μ¦νκΈ°
κ°μ ꡬμ±κ³Ό κ²μ¦ ꡬμ±μ μμ±ν λ€ λͺ¨λΈμ μ¬μ©νμ¬ μ΄λ₯Ό νκ°ν μ μμ΅λλ€.
Play μλΉμ€ λ°νμμ΄ μ¬λ°λ₯΄κ² μ΄κΈ°νλμλμ§, κ·Έλ¦¬κ³ κΈ°κΈ°μμ GPU λ리μλ₯Ό μ€ννμ¬ μ¬μ©ν μ μλμ§ νμΈν΄μΌ ν©λλ€.
AccelerationService.create()
λ₯Ό νΈμΆνμ¬ AccelerationService
λ₯Ό μΈμ€ν΄μ€νν©λλ€.
κ·Έλ° λ€μ validateConfig()
λ₯Ό νΈμΆνμ¬ λͺ¨λΈμ λν κ°μ ꡬμ±μ κ²μ¦ν μ μμ΅λλ€.
λν, validateConfigs()
λ₯Ό νΈμΆνκ³ Iterable<AccelerationConfig>
κ°μ²΄λ₯Ό λ§€κ°λ³μλ‘ μ λ¬νμ¬ μ¬λ¬ ꡬμ±μ κ²μ¦ν μλ μμ΅λλ€.
validateConfig()
λ λΉλκΈ°μ μμ
μ νμ±ννλ Google Play μλΉμ€μμ Task<
ValidatedAccelerationConfigResult
>
λ₯Ό λ°νν©λλ€.
κ²μ¦ νΈμΆμμ κ²°κ³Όλ₯Ό μ»μΌλ €λ©΄ addOnSuccessListener()
μ½λ°±μ μΆκ°νμΈμ.
μΈν°ν리ν°μμ κ²μ¦λ κ΅¬μ± μ¬μ©νκΈ°
μ½λ°±μμ λ°νλ ValidatedAccelerationConfigResult
κ° μ ν¨νμ§ νμΈν ν interpreterOptions.setAccelerationConfig()
λ₯Ό νΈμΆνμ¬ κ²μ¦λ ꡬμ±μ μΈν°ν리ν°μ λν κ°μ ꡬμ±μΌλ‘ μ€μ ν μ μμ΅λλ€.
κ΅¬μ± μΊμ±
λͺ¨λΈμ λν μ΅μ μ κ°μ ꡬμ±μ κΈ°κΈ°μμ λ³κ²½λ κ°λ₯μ±μ΄ κ±°μ μμ΅λλ€. λ°λΌμ λ§μ‘±μ€λ¬μ΄ κ°μ ꡬμ±μ λ°μΌλ©΄ λ€λ₯Έ κ²μ¦μ μ€ννλ λμ λ°μ κ°μ ꡬμ±μ κΈ°κΈ°μ μ μ₯νκ³ μ ν리μΌμ΄μ
μ΄ μ΄λ₯Ό κ²μνμ¬ λ€μ μΈμ
λμ InterpreterOptions
λ₯Ό μμ±νλ λ° μ¬μ©νλλ‘ ν΄μΌ ν©λλ€. ValidatedAccelerationConfigResult
μ serialize()
λ° deserialize()
λ©μλλ₯Ό μ¬μ©νλ©΄ μ μ₯ λ° κ²μ νλ‘μΈμ€κ° λ μ¬μμ§λλ€.
μν μ ν리μΌμ΄μ
κ°μ μλΉμ€κ° μ λλ‘ ν΅ν©λμλμ§ κ²ν νλ €λ©΄ μν μ±μ μ΄ν΄λ³΄μΈμ.
μ ν μ¬ν
κ°μ μλΉμ€μλ νμ¬ λ€μκ³Ό κ°μ μ ν μ¬νμ΄ μμ΅λλ€.
νμ¬λ CPU λ° GPU κ°μ ꡬμ±λ§ μ§μλ©λλ€.
Google Play μλΉμ€μμ TensorFlow Liteλ§ μ§μνλ©° λ²λ€ λ²μ μ TensorFlow Liteλ₯Ό μ¬μ© μ€μΈ κ²½μ° μ¬μ©ν μ μμ΅λλ€.
ValidatedAccelerationConfigResult
κ°μ²΄λ₯Ό μ¬μ©νμ¬BaseOptions
λ₯Ό μ§μ μ΄κΈ°νν μ μμΌλ―λ‘ TensorFlow Lite μμ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ§μνμ§ μμ΅λλ€.κ°μ μλΉμ€ SDKλ API λ 벨 22 μ΄μλ§ μ§μν©λλ€.
κ²½κ³ μ¬ν{:#caveats}
νΉν μ΄μμμ μ΄ SDKλ₯Ό μ¬μ©ν κ³νμ΄ μλ κ²½μ° λ€μ κ²½κ³ μ¬νμ μ£Όμ κΉκ² κ²ν ν΄ μ£ΌμΈμ.
λ² ν λ²μ μ μ’ λ£νκ³ κ°μ μλΉμ€ APIμ μμ λ²μ μ μΆμνκΈ° μ μ νμ¬ λ² ν λ²μ κ³Ό μ½κ°μ μ°¨μ΄κ° μμ μ μλ μ SDKλ₯Ό νΌλΈλ¦¬μ±ν μμ μ λλ€. κ°μ μλΉμ€λ₯Ό κ³μ μ¬μ©νλ €λ©΄ μ΄ μ SDKλ‘ λ§μ΄κ·Έλ μ΄μ νκ³ μ λμ μ±μΌλ‘ μ λ°μ΄νΈλ₯Ό νΈμν΄μΌ ν©λλ€. κ·Έλ κ² νμ§ μμ κ²½μ° μΌμ μκ°μ΄ μ§λλ©΄ λ² ν SDKκ° λ μ΄μ Google Play μλΉμ€μ νΈνλμ§ μμ μ μμΌλ©° λ¬Έμ κ° λ°μν μ μμ΅λλ€.
κ°μ μλΉμ€ API λ΄μ νΉμ κΈ°λ₯μ΄λ API μ μ²΄κ° μ μ λ²μ μΌλ‘ μ 곡λλ€λ 보μ₯μ μμ΅λλ€. ν΄λΉ κΈ°λ₯μ΄λ APIλ 무기ν λ² ν λ²μ μΌλ‘ μ μ§λκ±°λ, μ’ λ£λκ±°λ, λ€λ₯Έ κΈ°λ₯κ³Ό κ²°ν©λμ΄ νΉμ κ°λ°μ λμμ ν¨ν€μ§λ‘ μ 곡λ μ μμ΅λλ€. κ°μ μλΉμ€ APIμ μΌλΆ κΈ°λ₯ λλ μ 체 API μ체λ μΈμ κ° μ μ λ²μ μΌλ‘ μ 곡λ μ μμ§λ§, μ΄μ λν μΌμ μ μ ν΄μ Έ μμ§ μμ΅λλ€.
μ¬μ© μ½κ΄ λ° κ°μΈ μ 보 μ·¨κΈ λ°©μΉ¨{:#terms_privacy}
μλΉμ€ μ½κ΄
κ°μ μλΉμ€ APIμ μ¬μ© μ Google API μλΉμ€ μ½κ΄μ μ μ©μ λ°μ΅λλ€.
λν κ°μ μλΉμ€ APIλ νμ¬ λ² ν λ²μ μ΄λ―λ‘ μ΄λ₯Ό μ¬μ©ν¨μΌλ‘μ¨ μμ κ²½κ³ μ¬ν μΉμ
μ μ€λͺ
λ μ μ¬μ λ¬Έμ λ₯Ό μΈμ νκ³ κ°μ μλΉμ€κ° νμ μ§μ λ λλ‘ μλνμ§ μμ μ μμμ μΈμ νκ² λ©λλ€.
κ°μΈ μ 보 μ·¨κΈ λ°©μΉ¨
κ°μ μλΉμ€ APIλ₯Ό μ¬μ©νλ©΄ μ
λ ₯ λ°μ΄ν°(μ: μ΄λ―Έμ§, λμμ, ν
μ€νΈ)μ μ²λ¦¬λ μ λΆ μ¨λλ°μ΄μ€λ‘ μ΄λ£¨μ΄μ§λ©°, κ°μ μλΉμ€λ ν΄λΉ λ°μ΄ν°λ₯Ό Google μλ²λ‘ μ μ‘νμ§ μμ΅λλ€. κ²°κ³Όμ μΌλ‘ κΈ°κΈ°λ₯Ό λ λμλ μ λλ μ
λ ₯ λ°μ΄ν°λ₯Ό μ²λ¦¬ν λ μ΄ APIλ₯Ό μ¬μ©ν μ μμ΅λλ€.
κ°μ μλΉμ€ APIλ λ²κ·Έ μμ , μ
λ°μ΄νΈλ λͺ¨λΈ λ° νλμ¨μ΄ κ°μκΈ° νΈνμ± μ 보 λ±μ μμ νκΈ° μν΄ λλλ‘ Google μλ²μ μ°κ²°ν μ μμ΅λλ€. λν κ°μ μλΉμ€ APIλ μ±μ API μ±λ₯ λ° νμ©μ λν λ©νΈλ¦μ Googleμ μ μ‘ν©λλ€. Googleμ κ°μΈ μ 보 μ·¨κΈ λ°©μΉ¨μ μμΈν μ€λͺ
λ λλ‘ μ΄ λ©νΈλ¦ λ°μ΄ν°λ₯Ό μ¬μ©νμ¬ μ±λ₯μ μΈ‘μ νκ³ , APIλ₯Ό λλ²κ·Έ, μ μ§ λ° κ°μ νλ©°, μ€μ© λλ λ¨μ©μ κ°μ§ν©λλ€.
μ¬λ¬λΆμ κ΄λ ¨ λ²λ₯ μμ μꡬνλ λ°μ λ°λΌ Googleμ κ°μ μλΉμ€ λ©νΈλ¦ λ°μ΄ν° μ²λ¦¬μ λν΄ μ± μ¬μ©μμκ² μ릴 μ±
μμ΄ μμ΅λλ€.
λΉμ¬κ° μμ§νλ λ°μ΄ν°μλ λ€μμ΄ ν¬ν¨λ©λλ€.
κΈ°κΈ° μ 보(μ: μ μ‘°μ 체, λͺ¨λΈ, OS λ²μ λ° λΉλ) λ° μ¬μ© κ°λ₯ν ML νλμ¨μ΄ κ°μκΈ°(GPU λ° DSP). μ§λ¨ λ° μ¬μ© λΆμμ μ¬μ©λ©λλ€.
μ± μ 보(ν¨ν€μ§ μ΄λ¦/λ²λ€ ID, μ± λ²μ ). μ§λ¨ λ° μ¬μ© λΆμμ μ¬μ©λ©λλ€.
API ꡬμ±(μ: μ΄λ―Έμ§ νμ, ν΄μλ λ±). μ§λ¨ λ° μ¬μ© λΆμμ μ¬μ©λ©λλ€.
μ΄λ²€νΈ μ ν(μ: μ΄κΈ°ν, λͺ¨λΈ λ€μ΄λ‘λ, μ λ°μ΄νΈ, μ€ν, νμ§ λ±). μ§λ¨ λ° μ¬μ© λΆμμ μ¬μ©λ©λλ€.
μ€λ₯ μ½λ. μ§λ¨μ μ¬μ©λ©λλ€.
μ±λ₯ λ©νΈλ¦. μ§λ¨μ μ¬μ©λ©λλ€.
μ¬μ©μ λλ 물리μ κΈ°κΈ°λ₯Ό κ³ μ νκ² μλ³νμ§ μλ μ€μΉλ³ μλ³μ. μ격 κ΅¬μ± λ° μ¬μ© λΆμμ μ΄μμ μ¬μ©λ©λλ€.
λ€νΈμν¬ μμ² λ°μ μ IP μ£Όμ. μ격 κ΅¬μ± μ§λ¨μ μ¬μ©λ©λλ€. μμ§λ IP μ£Όμλ μμ 보κ΄λ©λλ€.
μ§μ λ° νΌλλ°±
TensorFlow Issue Trackerλ₯Ό ν΅ν΄ νΌλλ°±μ μ 곡νκ³ μ§μλ°μ μ μμ΅λλ€. Google Play μλΉμ€μμ μ΄μ ν νλ¦Ώμ μ¬μ©νμ¬ λ¬Έμ λ° μ§μ μμ²μ λ³΄κ³ ν΄μ£ΌμΈμ.