티스토리 뷰

반응형

안드로이드 스튜디오에서 Yolo 모델이나 다른 모델들을 사용할 때, GPU 설정에 대해서 애먹는 경우가 많다.

버전에 대해서도 찾으려면 죄다 영어 항목이라 힘들 듯 하다. 그래서 한국어로 설명하고자 한다.

 

코드는 여기에서 볼 수 있다.

 

결론부터 말하자면, Gradle에서 다음과 같이 의존성 추가를 해주면 된다.

 

Gradle Scripts / build.gradle.kts

dependencies { ...

implementation("org.tensorflow:tensorflow-lite:2.14.0")
implementation("org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.4.4")
implementation("org.tensorflow:tensorflow-lite-support:0.4.4")
implementation("org.tensorflow:tensorflow-lite-gpu:2.14.0")
implementation("org.tensorflow:tensorflow-lite-gpu-api:2.14.0")

}

 

tensorflow-lite하고, tensorflow-lite-gpu하고는 버전을 맞춰줘야 한다.

그리고 gpu-delegate-plugin도 써줘야 한다.

 

그리고 나서 모델에서 실제로 쓸 때, GPU에 할당할 수 있는 Interpreter를 설정해주면 된다.

 

다음은 Detector.kt의 부분 코드이다.

import org.tensorflow.lite.gpu.CompatibilityList
import org.tensorflow.lite.gpu.GpuDelegate

...

fun setup() {
        val model = FileUtil.loadMappedFile(context, modelPath)
        val options = Interpreter.Options()

        val compatList = CompatibilityList()
        if (compatList.isDelegateSupportedOnThisDevice) {
            val delegateOptions = compatList.bestOptionsForThisDevice
            options.addDelegate(GpuDelegate(delegateOptions))
        } else {
            options.setNumThreads(4) // GPU 사용이 불가능한 경우 CPU 스레드 설정
        }

        interpreter = Interpreter(model, options)

        ...

 

위의 코드에서 보면, CompatibilityList 객체를 선언하고, delegate options에서 bestOptionsForThisDevice를 통해 GPU를 설정해주는 걸 볼 수 있다.

정확히는 해당 옵션에 GpuDelegate를 추가해줘서 판단하게 하는 것이다.

 

만약 GPU가 없다면, CPU 스레드로 설정하게 만들어준다.

 

이렇게 해서 모델을 인터프리터로 선언해주면 모델이 GPU에서 돌아가는 걸 확인할 수 있다.

예시 코드도 있으니, 직접 해당 코드를 보면서 학습 및 실습해보자.

반응형