Path: blob/master/site/ko/lite/performance/measurement.md
38956 views
μ±λ₯ μΈ‘μ
λ²€μΉλ§ν¬ λꡬ
TensorFlow Lite λ²€μΉλ§ν¬ λꡬλ νμ¬ λ€μκ³Ό κ°μ μ€μν μ±λ₯ μ§νμ λν ν΅κ³λ₯Ό μΈ‘μ νκ³ κ³μ°ν©λλ€.
μ΄κΈ°ν μκ°
μλ°μ μνμ μΆλ‘ μκ°
μ μ μνμ μΆλ‘ μκ°
μ΄κΈ°ν μκ° λμμ λ©λͺ¨λ¦¬ μ¬μ©λ
μ 체 λ©λͺ¨λ¦¬ μ¬μ©λ
λ²€μΉλ§ν¬ λꡬλ Android λ° iOSμ© λ²€μΉλ§ν¬ μ±κ³Ό κΈ°λ³Έ λͺ λ Ήμ€ λ°μ΄λλ¦¬λ‘ μ¬μ©ν μ μμΌλ©°, λͺ¨λ λμΌν ν΅μ¬ μ±λ₯ μΈ‘μ λ‘μ§μ 곡μ ν©λλ€. λ°νμ νκ²½μ μ°¨μ΄λ‘ μΈν΄ μ¬μ© κ°λ₯ν μ΅μ λ° μΆλ ₯ νμμ΄ μ½κ° λ€λ¦ λλ€.
Android λ²€μΉλ§ν¬ μ±
Androidμμ λ²€μΉλ§ν¬ λꡬλ₯Ό μ¬μ©νλ λ°λ λ κ°μ§ μ΅μ μ΄ μμ΅λλ€. νλλ κΈ°λ³Έ λ²€μΉλ§ν¬ λ°μ΄λ리μ΄κ³ λ€λ₯Έ νλλ Android λ²€μΉλ§ν¬ μ±μΌλ‘, μ΄ λ λ²μ§Έκ° λͺ¨λΈμ΄ μ±μμ μ΄λ»κ² μλνλμ§ λ³΄λ€ μ λνλ΄μ€λλ€. μ΄λ μͺ½μ΄λ , λ²€μΉλ§ν¬ λꡬμ μμΉλ μ€μ μ±μμ λͺ¨λΈλ‘ μΆλ‘ μ μ€νν λμ μ¬μ ν μ½κ° λ€λ¦ λλ€.
μ΄ Android λ²€μΉλ§ν¬ μ±μλ UIκ° μμ΅λλ€. adb λͺ
λ Ήμ΄λ‘ μ€μΉ λ° μ€ννκ³ adb logcat λͺ
λ Ήμ΄λ‘ κ²°κ³Όλ₯Ό κ°μ Έμ΅λλ€.
μ± λ€μ΄λ‘λ λλ λΉλ
μλ λ§ν¬λ₯Ό μ¬μ©νμ¬ μΌκ° μ¬μ λΉλλ Android λ²€μΉλ§ν¬ μ±μ λ€μ΄λ‘λν©λλ€.
Flex delegateλ₯Ό ν΅ν΄ TF μ°μ°μ μ§μνλ Android λ²€μΉλ§ν¬ μ±μ κ²½μ°, μλ λ§ν¬λ₯Ό μ¬μ©νμΈμ.
λ€μ μ§μΉ¨μ λ°λΌ μμ€μμ μ±μ λΉλν μλ μμ΅λλ€.
μ°Έκ³ : x86 CPU λλ Hexagon λ리μμμ Android λ²€μΉλ§ν¬ apkλ₯Ό μ€ννλ €λ κ²½μ° λλ λͺ¨λΈμ μΌλΆ TF μ°μ°μ λλ μ¬μ©μ μ§μ μ°μ°μκ° ν¬ν¨λ κ²½μ° μμ€μμ μ±μ λΉλν΄μΌ ν©λλ€.
λ²€μΉλ§ν¬ μ€λΉ
λ²€μΉλ§ν¬ μ±μ μ€ννκΈ° μ μ λ€μκ³Ό κ°μ΄ μ±μ μ€μΉνκ³ λͺ¨λΈ νμΌμ μ₯μΉμ νΈμν©λλ€.
λ²€μΉλ§ν¬ μ€ν
graphλ νμ λ§€κ°λ³μμ
λλ€.
graph:string
TFLite λͺ¨λΈ νμΌμ΄ μλ κ²½λ‘μ λλ€.
λ²€μΉλ§ν¬λ₯Ό μ€ννκΈ° μν΄ λ λ§μ μ νμ λ§€κ°λ³μλ₯Ό μ§μ ν μ μμ΅λλ€.
num_threads:int(κΈ°λ³Έκ°=1)
TFLite μΈν°ν리ν°λ₯Ό μ€ννλ λ° μ¬μ©ν μ€λ λ μμ λλ€.use_gpu:bool(κΈ°λ³Έκ°=κ±°μ§)
GPU λ리μλ₯Ό μ¬μ©ν©λλ€.use_nnapi:bool(κΈ°λ³Έκ°=κ±°μ§)
NNAPI λ리μλ₯Ό μ¬μ©ν©λλ€.use_xnnpack:bool(κΈ°λ³Έκ°=false)
XNNPACK λ리μλ₯Ό μ¬μ©ν©λλ€.use_hexagon:bool(κΈ°λ³Έκ°=false)
Hexagon λ리μλ₯Ό μ¬μ©ν©λλ€.
μ¬μ© μ€μΈ μ₯μΉμ λ°λΌ μ΄λ¬ν μ΅μ μ€ μΌλΆλ₯Ό μ¬μ©νμ§ λͺ»νκ±°λ ν¨κ³Όκ° μμ μ μμ΅λλ€. λ²€μΉλ§ν¬ μ±μΌλ‘ μ€νν μ μλ μΆκ° μ±λ₯ λ§€κ°λ³μμ λν΄μλ λ§€κ°λ³μλ₯Ό μ°Έμ‘°νμΈμ.
logcat λͺ
λ Ήμ μ¬μ©νμ¬ κ²°κ³Όλ₯Ό λ΄
λλ€.
λ²€μΉλ§ν¬ κ²°κ³Όλ λ€μκ³Ό κ°μ΄ λ³΄κ³ λ©λλ€.
λ€μ΄ν°λΈ λ²€μΉλ§ν¬ λ°μ΄λ리
λ²€μΉλ§ν¬ λꡬλ λ€μ΄ν°λΈ λ°μ΄λ리 benchmark_modelλ‘λ μ 곡λ©λλ€. Linux, Mac, μλ² λλ μ₯μΉ λ° Android μ₯μΉμ μ
Έ λͺ
λ Ήμ€μμ μ΄ λꡬλ₯Ό μ€νν μ μμ΅λλ€.
λ°μ΄λ리 λ€μ΄λ‘λ λλ λΉλ
μλ λ§ν¬λ₯Ό λ°λΌ μΌκ° μ¬μ λΉλλ λ€μ΄ν°λΈ λͺ λ Ήμ€ λ°μ΄λ리λ₯Ό λ€μ΄λ‘λν©λλ€.
Flex λ리μλ₯Ό ν΅ν΄ TF μ°μ°μ μ§μνλ μΌκ° μ¬μ λΉλλ λ°μ΄λ리μ κ²½μ°, μλ λ§ν¬λ₯Ό μ¬μ©νμΈμ.
TensorFlow Lite Hexagon λ리μμ λ²€μΉλ§νΉνκΈ° μν΄ νμν libhexagon_interface.so νμΌλ 미리 λΉλνμ΅λλ€(μ΄ νμΌμ λν μμΈν λ΄μ©μ μ¬κΈ° μ°Έμ‘°). μλ λ§ν¬μμ ν΄λΉ νλ«νΌμ νμΌμ λ€μ΄λ‘λν ν νμΌλͺ
μ libhexagon_interface.soλ‘ λ³κ²½ν΄μ£ΌμΈμ.
μ»΄ν¨ν°μ μμ€μμ κΈ°λ³Έ λ²€μΉλ§ν¬ λ°μ΄λ리λ₯Ό λΉλν μλ μμ΅λλ€.
Android NDK ν΄μ²΄μΈμΌλ‘ λΉλνλ €λ©΄ λ¨Όμ μ΄ κ°μ΄λμ λ°λΌ λΉλ νκ²½μ μ€μ νκ±°λ μ΄ κ°μ΄λμ μ€λͺ μ λ°λΌ λ컀 μ΄λ―Έμ§λ₯Ό μ¬μ©ν΄μΌ ν©λλ€.
μ°Έκ³ : μ΄κ²μ λ²€μΉλ§νΉμ μν΄ Android μ₯μΉμμ μ§μ λ°μ΄λ리λ₯Ό νΈμνκ³ μ€ννλ μ ν¨ν μ κ·Ό λ°©μμ΄μ§λ§ μ€μ Android μ± λ΄μμ μ€ννλ κ²μ λΉν΄ μ±λ₯μ λ―ΈμΈν(κ·Έλ¬λ κ΄μ°° κ°λ₯ν) μ°¨μ΄κ° λ°μν μ μμ΅λλ€. νΉν Androidμ μ€μΌμ€λ¬λ μ€λ λ λ° νλ‘μΈμ€ μ°μ μμλ₯Ό κΈ°λ°μΌλ‘ λμμ μ‘°μ ν©λλ€. μ΄λ μ κ²½ νλ/μ ν리μΌμ΄μ
κ³Ό adb shell ...μ ν΅ν΄ μ€νλλ μΌλ° λ°±κ·ΈλΌμ΄λ λ°μ΄λ리 κ°μ μ°¨μ΄κ° μμ΅λλ€. μ΄λ¬ν λ§μΆ€ν λμμ TensorFlow Liteλ‘ λ€μ€ μ€λ λ CPU μ€νμ νμ±νν λ κ°μ₯ λΆλͺ
ν©λλ€. λ°λΌμ μ±λ₯ μΈ‘μ μλ Android λ²€μΉλ§ν¬ μ±μ΄ κΆμ₯λ©λλ€.
λ²€μΉλ§ν¬ μ€ν
μ»΄ν¨ν°μμ λ²€μΉλ§ν¬λ₯Ό μ€ννλ €λ©΄ μ Έμμ λ°μ΄λ리λ₯Ό μ€νν©λλ€.
λ€μ΄ν°λΈ λͺ λ Ήμ€ λ°μ΄λ리μ ν¨κ» μμμ μΈκΈν κ²κ³Ό λμΌν λ§€κ°λ³μ μΈνΈλ₯Ό μ¬μ©ν μ μμ΅λλ€.
λͺ¨λΈ μ°μ°μ νλ‘νμΌλ§
λ²€μΉλ§ν¬ λͺ¨λΈ λ°μ΄λ리λ₯Ό μ¬μ©νλ©΄ λͺ¨λΈ μ°μ°μ νλ‘νμΌλ§νκ³ κ° μ°μ°μμ μ€ν μκ°μ μ»μ μλ μμ΅λλ€. μ΄λ₯Ό μν΄ νΈμΆ μ€μ --enable_op_profiling=true νλκ·Έλ₯Ό benchmark_modelλ‘ μ λ¬ν©λλ€. μμΈν λ΄μ©μ μ¬κΈ°μ μ€λͺ
λμ΄ μμ΅λλ€.
ν λ²μ μ€νμμ μ¬λ¬ μ±λ₯ μ΅μ μ μ 곡νλ λ€μ΄ν°λΈ λ²€μΉλ§ν¬ λ°μ΄λ리
ν λ²μ μ€νμΌλ‘ μ¬λ¬ μ±λ₯ μ΅μ
μ λ²€μΉλ§νΉνκΈ° μν νΈλ¦¬νκ³ κ°λ¨ν C++ λ°μ΄λ리λ μ 곡λ©λλ€. μ΄ λ°μ΄λ리λ ν λ²μ νλμ μ±λ₯ μ΅μ
λ§ λ²€μΉλ§νΉν μ μλ μμ μΈκΈν λ²€μΉλ§ν¬ λꡬλ₯Ό κΈ°λ°μΌλ‘ ꡬμΆλμμ΅λλ€. λμΌν λΉλ/μ€μΉ/μ€ν νλ‘μΈμ€κ° μ΄μ©λμ§λ§ μ΄ λ°μ΄λ리μ BUILD λμ μ΄λ¦μ benchmark_model_performance_optionsμ΄λ©° λͺ κ°μ§ μΆκ° λ§€κ°λ³μλ₯Ό μ·¨ν©λλ€. μ΄ λ°μ΄λ리μ μ€μν λ§€κ°λ³μλ λ€μκ³Ό κ°μ΅λλ€.
perf_options_list: string(κΈ°λ³Έκ°='all')
λ²€μΉλ§νΉν TFLite μ±λ₯ μ΅μ
μ μΌνλ‘ κ΅¬λΆλ λͺ©λ‘μ
λλ€.
μλμ κ°μ΄ μ΄ λꡬμ λν μΌκ° μ¬μ λΉλλ λ°μ΄λ리λ₯Ό μ»μ μ μμ΅λλ€.
iOS λ²€μΉλ§ν¬ μ±
iOS μ₯μΉμμ λ²€μΉλ§ν¬λ₯Ό μ€ννλ €λ©΄ μμ€μμ μ±μ λΉλν΄μΌ ν©λλ€. μμ€ νΈλ¦¬μ benchmark_data λλ ν°λ¦¬μ TensorFlow Lite λͺ¨λΈ νμΌμ λ£κ³ benchmark_params.json νμΌμ μμ ν©λλ€. μ΄λ¬ν νμΌμ μ±μ ν¨ν€μ§λκ³ μ±μ λλ ν°λ¦¬μμ λ°μ΄ν°λ₯Ό μ½μ΅λλ€. μμΈν μ§μΉ¨μ λ³΄λ €λ©΄ iOS λ²€μΉλ§ν¬ μ±μ λ°©λ¬ΈνμΈμ.
μ μλ €μ§ λͺ¨λΈμ λν μ±λ₯ λ²€μΉλ§ν¬
μ΄ μΉμ μλ μΌλΆ Android λ° iOS μ₯μΉμμ μ μλ €μ§ λͺ¨λΈμ μ€νν λ TensorFlow Lite μ±λ₯ λ²€μΉλ§ν¬κ° λμ΄λμ΄ μμ΅λλ€.
Android μ±λ₯ λ²€μΉλ§ν¬
μ΄λ¬ν μ±λ₯ λ²€μΉλ§ν¬ μμΉλ λ€μ΄ν°λΈ λ²€μΉλ§ν¬ λ°μ΄λλ¦¬λ‘ μμ±λμμ΅λλ€.
Android λ²€μΉλ§ν¬μ κ²½μ°, μ₯μΉμ ν° μ½μ΄λ₯Ό μ¬μ©νμ¬ νΈμ°¨λ₯Ό μ€μ΄λλ‘ CPU μ νΈλκ° μ€μ λ©λλ€(μμΈν λ΄μ© μ°Έμ‘°).
λͺ¨λΈμ /data/local/tmp/tflite_models λλ ν°λ¦¬μ λ€μ΄λ‘λνμ¬ μμΆμ νΌλ€κ³ κ°μ ν©λλ€. λ²€μΉλ§ν¬ λ°μ΄λ리λ μ΄ μ§μΉ¨μ λ°λΌ λΉλνκ³ /data/local/tmp λλ ν°λ¦¬μ μλ κ²μΌλ‘ κ°μ ν©λλ€.
λ²€μΉλ§ν¬λ₯Ό μ€ννλ €λ©΄:
nnapi λ리μλ‘ μ€ννλ €λ©΄ --use_nnapi=trueλ₯Ό μ€μ ν©λλ€. GPU λ리μλ‘ μ€ννλ €λ©΄ --use_gpu=trueλ₯Ό μ€μ ν©λλ€.
μλ μ±λ₯ κ°μ Android 10μμ μΈ‘μ λμμ΅λλ€.
| λͺ¨λΈ μ΄λ¦ | μ₯μΉ | CPU, 4 μ€λ λ | GPU | NNAPI |
|---|---|---|---|---|
| Mobilenet_1.0_224(float) | Pixel 3 | 23.9 ms | 6.45 ms | 13.8 ms |
| Pixel 4 | 14.0 ms | 9.0 ms | 14.8 ms | |
| Mobilenet_1.0_224 (quant) | Pixel 3 | 13.4 ms | --- | 6.0 ms |
| Pixel 4 | 5.0 ms | --- | 3.2 ms | |
| NASNet mobile | Pixel 3 | 56 ms | --- | 102 ms |
| Pixel 4 | 34.5 ms | --- | 99.0 ms | |
| SqueezeNet | Pixel 3 | 35.8 ms | 9.5 ms | 18.5 ms |
| Pixel 4 | 23.9 ms | 11.1 ms | 19.0 ms | |
| Inception_ResNet_V2 | Pixel 3 | 422 ms | 99.8 ms | 201 ms |
| Pixel 4 | 272.6 ms | 87.2 ms | 171.1 ms | |
| Inception_V4 | Pixel 3 | 486 ms | 93 ms | 292 ms |
| Pixel 4 | 324.1 ms | 97.6 ms | 186.9 ms |
iOS μ±λ₯ λ²€μΉλ§ν¬
μ΄λ¬ν μ±λ₯ λ²€μΉλ§ν¬ μμΉλ iOS λ²€μΉλ§ν¬ μ±μΌλ‘ μμ±λμμ΅λλ€.
iOS λ²€μΉλ§ν¬λ₯Ό μ€ννκΈ° μν΄ μ μ ν λͺ¨λΈμ ν¬ν¨νλλ‘ λ²€μΉλ§ν¬ μ±μ μμ νμΌλ©° num_threadsλ₯Ό 2λ‘ μ€μ νλλ‘ benchmark_params.jsonμ μμ νμ΅λλ€. GPU λ리μλ₯Ό μ¬μ©νκΈ° μν΄ benchmark_params.jsonμ "use_gpu" : "1" λ° "gpu_wait_type" : "aggressive" μ΅μ
λ μΆκ°λμμ΅λλ€.
| λͺ¨λΈ μ΄λ¦ | μ₯μΉ | CPU, 2 μ€λ λ | GPU |
|---|---|---|---|
| Mobilenet_1.0_224(float) | iPhone XS | 14.8 ms | 3.4 ms |
| Mobilenet_1.0_224 (quant) | iPhone XS | 11 ms | --- |
| NASNet mobile | iPhone XS | 30.4 ms | --- |
| SqueezeNet | iPhone XS | 21.1 ms | 15.5 ms |
| Inception_ResNet_V2 | iPhone XS | 261.1 ms | 45.7 ms |
| Inception_V4 | iPhone XS | 309 ms | 54.4 ms |
TensorFlow Lite λ΄λΆ μΆμ
Androidμμ TensorFlow Lite λ΄λΆ μΆμ
μ°Έκ³ : μ΄ κΈ°λ₯μ Tensorflow Lite v2.4λΆν° μ¬μ©ν μ μμ΅λλ€.
Android μ±μ TensorFlow Lite μΈν°νλ¦¬ν° λ΄λΆ μ΄λ²€νΈλ Android μΆμ λκ΅¬λ‘ μΊ‘μ²ν μ μμ΅λλ€. μ΄λ Android Trace APIμ λμΌν μ΄λ²€νΈμ΄λ―λ‘ Java/Kotlin μ½λμμ μΊ‘μ²λ μ΄λ²€νΈκ° TensorFlow Lite λ΄λΆ μ΄λ²€νΈμ ν¨κ» νμλ©λλ€.
μ΄λ²€νΈμ λͺ κ°μ§ μλ λ€μκ³Ό κ°μ΅λλ€.
μ°μ°μ νΈμΆ
λ리μμ μν κ·Έλν μμ
ν μ ν λΉ
μΆμ μΊ‘μ²λ₯Ό μν λ€μν μ΅μ μ€μμ μ΄ κ°μ΄λμμλ Android Studio CPU νλ‘νμΌλ¬ λ° μμ€ν μΆμ μ±μ λ€λ£Ήλλ€. λ€λ₯Έ μ΅μ μ λν΄μλ Perfetto λͺ λ Ήμ€ λꡬ λλ Systrace λͺ λ Ήμ€ λꡬλ₯Ό μ°Έμ‘°νμΈμ.
Java μ½λμ μΆμ μ΄λ²€νΈ μΆκ°
μ΄κ²μ μ΄λ―Έμ§ λΆλ₯ μμ μ±μ μ½λ μ‘°κ°μ
λλ€. TensorFlow Lite μΈν°ν리ν°λ recognizeImage/runInference μΉμ
μμ μ€νλ©λλ€. μ΄ λ¨κ³λ μ ν μ¬νμ΄μ§λ§ μΆλ‘ νΈμΆμ΄ μ΄λ£¨μ΄μ§ μμΉλ₯Ό νμΈνλ λ° λμμ΄ λ©λλ€.
TensorFlow Lite μΆμ μ¬μ©
TensorFlow Lite μΆμ μ νμ±ννλ €λ©΄ Android μ±μ μμνκΈ° μ μ Android μμ€ν
μμ± debug.tflite.traceλ₯Ό 1λ‘ μ€μ ν©λλ€.
TensorFlow Lite μΈν°ν리ν°κ° μ΄κΈ°νλ λ μ΄ μμ±μ΄ μ€μ λ κ²½μ°, μΈν°ν리ν°μ μ£Όμ μ΄λ²€νΈ(μ: μ°μ°μ νΈμΆ)κ° μΆμ λ©λλ€.
λͺ¨λ μΆμ μ μΊ‘μ²ν νμλ μμ± κ°μ 0μΌλ‘ μ€μ νμ¬ μΆμ μ λΉνμ±νν©λλ€.
Android Studio CPU νλ‘νμΌλ¬
μλ λ¨κ³μ λ°λΌ Android Studio CPU νλ‘νμΌλ¬λ‘ μΆμ μ μΊ‘μ²ν©λλ€.
μλ¨ λ©λ΄μμ **Run(μ€ν) > Profile 'app'('μ±' νλ‘νμΌλ§)**μ μ νν©λλ€.
νλ‘νμΌλ¬ μ°½μ΄ λνλλ©΄ CPU νμλΌμΈμ μ무 κ³³μ΄λ ν΄λ¦ν©λλ€.
CPU νλ‘νμΌλ§ λͺ¨λ μ€ 'Trace System Calls(μμ€ν νΈμΆ μΆμ )'λ₯Ό μ νν©λλ€.

'Record(κΈ°λ‘)' λ²νΌμ λλ¦ λλ€.
'Stop(μ€μ§)' λ²νΌμ λλ¦ λλ€.
μΆμ κ²°κ³Όλ₯Ό μ‘°μ¬ν©λλ€.

μ΄ μμμ μ€λ λμ μ΄λ²€νΈ κ³μΈ΅ ꡬ쑰μ κ° μ°μ°μ μκ°μ λν ν΅κ³λ₯Ό λ³Ό μ μμΌλ©°, μ€λ λ κ°μ μ 체 μ±μ λ°μ΄ν° νλ¦λ λ³Ό μ μμ΅λλ€.
μμ€ν μΆμ μ±
μμ€ν μΆμ μ±μ μ€λͺ λ λ¨κ³μ λ°λΌ Android Studio μμ΄ μΆμ μ μΊ‘μ²ν©λλ€.
μ΄ μμμλ λμΌν TFLite μ΄λ²€νΈκ° μΊ‘μ²λμ΄ Android μ₯μΉ λ²μ μ λ°λΌ Perfetto λλ Systrace νμμΌλ‘ μ μ₯λμμ΅λλ€. μΊ‘μ²λ μΆμ νμΌμ Perfetto UIμμ μ΄ μ μμ΅λλ€.

iOSμμ TensorFlow Lite λ΄λΆ μΆμ
μ°Έκ³ : μ΄ κΈ°λ₯μ Tensorflow Lite v2.5λΆν° μ¬μ©ν μ μμ΅λλ€.
iOS μ±μ TensorFlow Lite μΈν°νλ¦¬ν° λ΄λΆ μ΄λ²€νΈλ Xcodeμ ν¬ν¨λ Instruments λκ΅¬λ‘ μΊ‘μ²ν μ μμ΅λλ€. μ΄λ iOS signpost μ΄λ²€νΈμ΄λ―λ‘ Swift/Objective-C μ½λμμ μΊ‘μ²λ μ΄λ²€νΈλ TensorFlow Lite λ΄λΆ μ΄λ²€νΈμ ν¨κ» νμλ©λλ€.
μ΄λ²€νΈμ λͺ κ°μ§ μλ λ€μκ³Ό κ°μ΅λλ€.
μ°μ°μ νΈμΆ
λ리μμ μν κ·Έλν μμ
ν μ ν λΉ
TensorFlow Lite μΆμ μ¬μ©
μλ λ¨κ³μ λ°λΌ νκ²½ λ³μ debug.tflite.traceλ₯Ό μ€μ ν©λλ€.
Xcodeμ μλ¨ λ©λ΄μμ **Product(μ ν) > Scheme(λ°©μ) > Edit Scheme(λ°©μ νΈμ§)...**μ μ νν©λλ€.
μΌμͺ½ μ°½μμ 'Profile(νλ‘νμΌ)'μ ν΄λ¦ν©λλ€.
'Use the Run action's arguments and environment variables(μ€ν λμμ μΈμ λ° νκ²½ λ³μ μ¬μ©)' νμΈλμ μ ν μ·¨μν©λλ€.
'Environment Variables(νκ²½ λ³μ)' μΉμ μλμ
debug.tflite.traceλ₯Ό μΆκ°ν©λλ€.
iOS μ±μ νλ‘νμΌλ§ν λ TensorFlow Lite μ΄λ²€νΈλ₯Ό μ μΈνλ €λ©΄ νκ²½ λ³μλ₯Ό μ κ±°νμ¬ μΆμ μ λΉνμ±ννμΈμ.
XCode Instruments
μλ λ¨κ³μ λ°λΌ μΆμ μ μΊ‘μ²ν©λλ€.
Xcodeμ μλ¨ λ©λ΄μμ **Product(μ ν) > Profile(νλ‘νμΌ)**μ μ νν©λλ€.
Instruments λκ΅¬κ° μμλ λ νλ‘νμΌλ§ ν νλ¦Ώ μ€μμ λ‘κΉ μ ν΄λ¦ν©λλ€.
'Start(μμ)' λ²νΌμ λλ¦ λλ€.
'Stop(μ€μ§)' λ²νΌμ λλ¦ λλ€.
'os_signpost'λ₯Ό ν΄λ¦νμ¬ OS λ‘κΉ νμ μμ€ν νλͺ©μ νμ₯ν©λλ€.
'org.tensorflow.lite' OS λ‘κΉ νμ μμ€ν μ ν΄λ¦ν©λλ€.
μΆμ κ²°κ³Όλ₯Ό μ‘°μ¬ν©λλ€.

μ΄ μμμλ μ΄λ²€νΈμ κ³μΈ΅ ꡬ쑰μ κ° μ°μ°μ μκ°μ λν ν΅κ³λ₯Ό λ³Ό μ μμ΅λλ€.
μΆμ λ°μ΄ν° μ¬μ©
μΆμ λ°μ΄ν°λ₯Ό μ¬μ©νλ©΄ μ±λ₯ λ³λͺ© νμμ νμΈν μ μμ΅λλ€.
λ€μμ νλ‘νμΌλ¬λ‘λΆν° μ»μ μ μλ ν΅μ°°λ ₯μ λͺ κ°μ§ μμ μ±λ₯ κ°μ μ μν μ μ¬μ μ루μ μ λλ€.
μ¬μ© κ°λ₯ν CPU μ½μ΄ μκ° μΆλ‘ μ€λ λ μλ³΄λ€ μμΌλ©΄ CPU μ€μΌμ€λ§ μ€λ²ν€λλ‘ μΈν΄ μ±λ₯μ΄ μ νλ μ μμ΅λλ€. λͺ¨λΈ μΆλ‘ κ³Ό κ²ΉμΉμ§ μλλ‘ μ ν리μΌμ΄μ μμ λ€λ₯Έ CPU μ§μ½μ μμ μ μΌμ μ μ‘°μ νκ±°λ μΈν°νλ¦¬ν° μ€λ λ μλ₯Ό μ‘°μ ν μ μμ΅λλ€.
μ°μ°μκ° μμ ν μμλμ§ μμ κ²½μ°, λͺ¨λΈ κ·Έλνμ μΌλΆλ μμ νλμ¨μ΄ κ°μκΈ°κ° μλ CPUμμ μ€νλ©λλ€. μ§μλμ§ μλ μ°μ°μλ₯Ό μ μ¬ν μ§μλλ μ°μ°μλ‘ λ체ν μ μμ΅λλ€.