튼튼한 나무

모바일 배포를 위해 pytorch 및 tensorflow 모델 변환이 필요한 이유 완전 정복하기 (feat. onnx or tflite) 본문

computing

모바일 배포를 위해 pytorch 및 tensorflow 모델 변환이 필요한 이유 완전 정복하기 (feat. onnx or tflite)

공유지식 2023. 7. 11. 09:05

1. Pytorch pth model 파일을 변환 없이 모바일에서 사용할 수 있나?

 

아니요, 일반적으로 PyTorch .pth 모델 파일은 변환 없이 모바일 장치에서 직접 사용할 수 없습니다. PyTorch 모델은 Python 런타임 환경에 의존하는 PyTorch 프레임워크를 사용하여 실행되도록 설계되었습니다. 반면 모바일 장치는 일반적으로 하드웨어 아키텍처와 운영 체제가 다르기 때문에 PyTorch 모델을 대상 모바일 플랫폼과 호환되는 형식으로 변환해야 합니다.

 

모바일 장치에 PyTorch 모델을 배포하려면 일반적으로 모델을 모바일 친화적인 형식으로 변환하고 리소스가 제한된 환경에 맞게 최적화한 다음 TensorFlowLite, CoreML 또는 ONNX Runtime과 같은 적합한 모바일 프레임워크를 사용하여 모바일 앱에 통합하는 변환 프로세스를 따라야 합니다.

 

변환 프로세스는 모델 크기를 줄이고 모바일 장치에서 추론 속도를 향상시키는 양자화와 같은 모델 최적화 기술도 포함될 수 있습니다. 또한 특정 변환 프로세스는 선택한 모바일 프레임워크에서 제공하는 추론 엔진 및 런타임 환경과의 호환성을 보장합니다.

 

결과적으로 모바일 장치에 PyTorch 모델을 성공적으로 배포하려면 대상으로 하는 모바일 프레임워크에 특정한 변환 및 통합 단계를 거치는 것이 중요합니다. 변환 프로세스에는 일반적으로 PyTorch 모델을 ONNX와 같은 대상 모바일 프레임워크와 호환되는 형식으로 내보낸 다음 모바일 프레임워크의 도구 또는 API를 사용하여 모바일 플랫폼에서 모델을 가져와 배포하는 작업이 필요합니다.

 

 

2. 그래서 pytorch pth model 파일을 모바일에서 사용할 수 없는 구체적이고 상세한 이유가 무엇인데?

하드웨어 아키텍쳐: PyTorch 모델은 데스크톱 또는 서버 환경에서 흔히 볼 수 있는 CPU 또는 GPU에서 실행하도록 최적화되어 있습니다. 반면에 모바일 장치에는 ARM 기반 프로세서와 같은 다양한 하드웨어 아키텍처가 있으며 신경망 처리 장치(NPU)와 같은 특수 하드웨어 가속기가 있을 수 있습니다. 이러한 하드웨어 차이로 인해 모바일 장치의 특정 최적화 및 기능을 활용하려면 모델 변환이 필요합니다.


운영 체제: PyTorch는 Linux, Windows 또는 macOS와 같은 운영 체제에서 실행되도록 구축되었습니다. 그러나 모바일 장치는 자체 런타임 환경과 소프트웨어 개발 프레임워크가 있는 Android 또는 iOS와 같은 운영 체제를 사용합니다. 결과적으로 모바일 플랫폼의 런타임 환경에 맞게 모델을 조정하려면 변환이 필요합니다.


추론 엔진 호환성: PyTorch는 모바일 프레임워크에서 사용하는 추론 엔진과 호환되지 않는 자체 계산 그래프 및 텐서 작업에 의존합니다. TensorFlow Lite, Core ML 또는 ONNX Runtime과 같은 모바일 프레임워크에는 자체적으로 최적화된 추론 엔진과 런타임 환경이 있습니다. 변환에는 PyTorch 모델을 선택한 모바일 프레임워크와 호환되는 형식으로 변환하여 대상 플랫폼에서 효율적으로 실행할 수 있습니다.

 

3. 그렇다면, Tensorflow model 파일은 모바일에서 변환 없이 직접적으로 바로 사용이 가능한가?

 

아니요, TensorFlow 모델은 변환 없이 모바일 장치에서 직접 사용할 수 없습니다. TensorFlow 모델은 일반적으로 TensorFlow 프레임워크에 최적화된 프로토콜 버퍼 형식(.pb)이라는 형식으로 저장됩니다. 모바일 장치에서 TensorFlow 모델을 사용하려면 TensorFlow Lite를 사용하여 모바일 친화적인 형식으로 변환해야 합니다.

TensorFlow Lite는 모바일 및 임베디드 장치에 배포하도록 특별히 설계된 프레임워크입니다. 여기에는 TensorFlow 모델(.pb 형식)을 FlatBuffer 형식(.tflite 확장자)이라는 모바일 친화적 형식으로 변환할 수 있는 TensorFlow Lite 변환기라는 변환 도구가 포함되어 있습니다. 변환 프로세스는 모델 크기 축소 및 추론 속도 향상과 같은 모바일 장치에 특정한 하드웨어 제약 및 최적화를 고려합니다.

TensorFlow 모델이 TensorFlow Lite 형식으로 변환된 후 TensorFlow Lite Interpreter API를 사용하여 모바일 앱 내에서 변환된 모델을 로드하고 실행할 수 있습니다. TensorFlow Lite Interpreter는 사용 가능한 경우 하드웨어 가속(예: GPU 또는 NPU)을 활용하고 모바일 배포를 위한 최적화된 런타임 환경을 제공하여 모바일 장치에서 효율적으로 실행되도록 특별히 설계되었습니다.

요약하면 모바일 장치에서 TensorFlow 모델을 사용하려면 TensorFlow Lite 형식으로의 변환이 호환성을 보장하고 모바일 배포를 위해 모델을 최적화하고 TensorFlow Lite에서 제공하는 기능 및 최적화를 활용하는 데 필요합니다.

 

 

4. 그렇다면 궁극적으로, pytorch model 혹은 tensorflow model을 변환 없이 모바일에서 바로 직접적으로 사용할 수 없는 상세한 이유는?

TensorFlow 모델 및 PyTorch 모델은 다음과 같은 몇 가지 주요 이유로 인해 변환 없이 모바일 장치에서 직접 사용할 수 없습니다.

 

하드웨어 및 아키텍처 차이점: 스마트폰 및 태블릿과 같은 모바일 장치는 기존 데스크톱 또는 서버 환경과 비교하여 하드웨어 아키텍처가 다릅니다. 모바일 장치는 일반적으로 데스크톱 및 서버에서 발견되는 x86 프로세서와 다른 명령어 세트 및 기능을 가진 ARM 기반 프로세서를 사용하는 경우가 많습니다. 또한 모바일 장치에는 기계 학습 모델의 성능을 향상시킬 수 있는 NPU(신경망 처리 장치)와 같은 특수 하드웨어 가속기가 있을 수 있습니다. 모바일 장치의 특정 하드웨어 및 아키텍처에 대한 모델을 최적화하려면 변환이 필요합니다.

더보기

💡 x86과 ARM이 뭔데?

 

먼저, Intel 혹은 AMD를 중심으로 설계된 기기(x86)와 ARM 프로세서를 중심으로 설계된 기기는 상호 호환되지 않으며, x86 및 ARM은 컴퓨터 프로세서에서 일반적으로 사용되는 두 가지 명령어 세트 아키텍처입니다.

x86은 데스크탑 및 서버 환경에서 널리 사용되는 Intel 및 AMD 프로세서에서 주로 사용되는 명령 세트 아키텍처 제품군입니다. "x86"이라는 용어는 원래의 16비트 명령어 세트 아키텍처를 의미하지만 수년에 걸쳐 32비트(x86-32) 및 64비트(x86-64) 버전을 포함하도록 발전했습니다. x86 프로세서는 개인용 컴퓨터, 워크스테이션 및 데이터 센터에서 흔히 볼 수 있습니다.

ARM(Advanced RISC Machines)은 RISC(Reduced Instruction Set Computing) 아키텍처 제품군입니다. ARM 프로세서는 스마트폰, 태블릿, 임베디드 시스템을 비롯한 모바일 장치에 널리 사용됩니다. ARM 프로세서는 전력 효율성이 뛰어난 것으로 알려져 있으며 낮은 전력 소비와 성능의 균형을 맞추도록 설계되었습니다. ARM 기반 프로세서는 Qualcomm, MediaTek, Apple 및 Samsung과 같은 회사에서 제조합니다.

x86 및 ARM 아키텍처 모두 고유한 소프트웨어 및 개발 도구 에코시스템이 있으며 이들 간의 호환성이 다를 수 있습니다. 하나의 아키텍처용으로 컴파일되거나 최적화된 소프트웨어는 추가 고려 사항이나 변환 없이는 다른 아키텍처에서 직접 실행되지 않을 수 있습니다. 따라서 다른 아키텍처에 모델을 배포할 때 호환성을 보장하고 변환 및 배포 프로세스 중에 필요한 조정을 수행하는 것이 중요합니다.

더보기

💡 그래서, 변환하지 않은 pytorch 모델 혹은 tensorflow model이, x86에서 작동하도록 설계되어서 모바일의 ARM에서는 작동하지 않는다는 말인가?

 

변환되지 않은 PyTorch 모델과 TensorFlow 모델은 실제로 x86 아키텍처에서 작동하도록 설계되었습니다. PyTorch 및 TensorFlow 프레임워크는 데스크톱 및 서버 환경에서 흔히 볼 수 있는 x86 프로세서와 호환됩니다. x86 시스템에서 PyTorch 또는 TensorFlow를 사용하여 모델을 훈련하거나 개발할 때 결과 모델은 플랫폼에 구애받지 않으며 추가 변환이나 변환 없이 다른 x86 기반 시스템에서 사용할 수 있습니다.

따라서, x86 아키텍처에서 작동하도록 설계된 변환되지 않은 PyTorch 모델 및 TensorFlow 모델은 일반적으로 변환 없이 모바일 장치에 있는 ARM 기반 프로세서에서 직접 사용할 수 없습니다.

더불어, 모바일 장치에서 일반적으로 사용되는 ARM 프로세서는 x86 프로세서와 비교하여 명령어 세트 아키텍처가 다릅니다. 결과적으로 ARM 프로세서의 바이너리 형식 및 실행 요구 사항은 x86 프로세서의 것과 다릅니다.

즉, TensorFlow Lite 또는 PyTorch Mobile과 같은 모바일 프레임워크는 ARM 기반 프로세서용으로 모델을 변환하고 최적화하는 데 필요한 도구와 런타임 환경을 제공합니다. 이러한 프레임워크는 모바일 장치에서 기계 학습 모델의 효율적인 배포 및 실행을 가능하게 하는 변환 도구, 양자화 기술 및 런타임 최적화를 제공합니다. 따라서 모바일 장치의 ARM 기반 프로세서에 PyTorch 또는 TensorFlow 모델을 배포하려면 대상 ARM 아키텍처에서 호환성, 성능 및 효율적인 리소스 활용을 보장하기 위해 적절한 모바일 프레임워크를 사용하여 모델을 변환하거나 적응해야 합니다.

 

운영 체제 호환성: 모바일 장치는 자체 런타임 환경과 소프트웨어 개발 프레임워크가 있는 Android 또는 iOS와 같은 다양한 운영 체제에서 실행됩니다. TensorFlow 모델과 PyTorch 모델은 각각의 TensorFlow 및 PyTorch 프레임워크 내에서 작동하도록 설계되었으며 일반적으로 Python을 기반으로 하고 데스크톱 또는 서버 운영 체제용으로 구축되었습니다. 모바일 장치에서 이러한 모델을 사용하려면 Android용 TensorFlow Lite 또는 iOS용 Core ML과 같은 모바일 플랫폼의 런타임 환경과 호환되는 형식으로 변환해야 합니다.

 

모델 크기 및 효율성: TensorFlow 모델 및 PyTorch 모델은 파일 크기 및 메모리 소비 측면에서 상대적으로 클 수 있습니다. 모바일 장치는 데스크톱 또는 서버 환경에 비해 스토리지 및 메모리 리소스가 제한되어 있습니다. 모델 변환에는 종종 모델 크기를 줄이고 효율성을 향상시키기 위한 양자화, 가지치기 또는 압축과 같은 최적화가 포함됩니다. 이러한 최적화를 통해 모델이 모바일 장치의 제약 조건에 맞고 제한된 리소스로 효율적으로 실행될 수 있습니다.

 

추론 엔진 호환성: TensorFlow 모델과 PyTorch 모델은 해당 프레임워크에 따라 다른 계산 그래프와 텐서 작업을 사용합니다. TensorFlow Lite 또는 Core ML과 같은 모바일 프레임워크에는 모바일 장치용으로 설계된 고유한 최적화된 추론 엔진과 런타임 환경이 있습니다. 모델을 이러한 추론 엔진과 호환되는 형식으로 변환하여 모바일 플랫폼에서 효율적으로 실행하고 가능한 경우 하드웨어 가속을 활용하려면 변환이 필요합니다.

 

변환 프로세스를 거쳐 TensorFlow 모델은 TensorFlow Lite 형식으로 변환할 수 있으며 PyTorch 모델은 모바일 프레임워크와 호환되는 ONNX(Open Neural Network Exchange)와 같은 형식으로 변환할 수 있습니다. 이러한 변환을 통해 모바일 장치에서 모델의 호환성, 효율성 및 최적의 성능을 얻을 수 있습니다.

 

 

5. Pytorch pth model 파일을 모바일에서 사용하기 위한 torchscript 라는 것이 있던데, 이건 뭐지?

 

먼저, TorchScript는 PyTorch 코드에서 직렬화 가능하고 최적화 가능한 모델을 만드는 방법 입니다. 모든 TorchScript 프로그램은 Python 프로세스에서 저장하고 Python 종속성이 없는 프로세스에서 로드할 수 있습니다.

 

TorchScript는 다른 프레임워크에 이식 가능하고 효율적인 방식으로, PyTorch 모델을 직렬화, 최적화 및 배포할 수 있게 해주는 PyTorch 프레임워크의 구성 요소입니다.

컴파일된 프로그램과 유사하게 PyTorch 모델을 정적으로 유형이 지정된 그래프 기반 중간 표현(IR)으로 나타내는 방법을 제공합니다. TorchScript는 몇 가지 주요 기능을 제공합니다.

 

직렬화: TorchScript를 사용하면 모델 아키텍처와 관련 가중치 및 매개변수를 모두 포함하여 PyTorch 모델을 직렬화할 수 있습니다. 이 직렬화된 표현은 독립 실행형 파일로 저장하고 나중에 추론 또는 배포 목적으로 로드할 수 있습니다.

더보기

💡 직렬화(Serialization)가 뭔데?

직렬화는 개체를 나중에 저장, 전송 또는 재구성할 수 있는 형식으로 변환하는 프로세스를 나타냅니다. TorchScript의 맥락에서 직렬화는 아키텍처, 가중치 및 매개변수를 포함한 PyTorch 모델을 디스크에 저장하거나 네트워크를 통해 전송할 수 있는 직렬화된 표현으로 변환하는 프로세스를 의미합니다.

직렬화는 개체를 나중에 저장, 전송 또는 재구성할 수 있는 형식으로 변환하는 프로세스를 나타냅니다. TorchScript의 맥락에서 직렬화는 아키텍처, 가중치 및 매개변수를 포함한 PyTorch 모델을 디스크에 저장하거나 네트워크를 통해 전송할 수 있는 직렬화된 표현으로 변환하는 프로세스를 의미합니다.

즉, 직렬화를 사용하면 학습된 모델과 관련 가중치, 매개 변수 및 아키텍처를 이식 가능한 형식으로 유지할 수 있으므로 다양한 환경에서 PyTorch 모델을 보다 쉽게 배포, 공유 및 배포할 수 있습니다.

 

최적화: TorchScript는 PyTorch 모델에서 다양한 최적화 기술을 지원합니다. 상수 폴딩, 데드 코드 제거, 연산자 융합 등 다양한 변환을 수행하여 모델의 계산 그래프를 최적화합니다. 이러한 최적화는 모델의 효율성을 개선하고 추론 대기 시간을 줄이는 것을 목표로 합니다.

 

언어 독립성: TorchScript는 Python에서 모델 코드를 작성한 다음 TorchScript 표현으로 변환할 수 있도록 하여 언어 독립성을 제공합니다. 이를 통해 Python을 직접 지원하지 않는 환경에서 PyTorch 모델을 배포하고 실행할 수 있습니다.

 

플랫폼 간 배포: TorchScript 표현은 다양한 플랫폼과 환경에서 이식 가능하도록 설계되었습니다. 프로덕션 시스템, 임베디드 장치, 모바일 애플리케이션 등에 PyTorch 모델을 배포하는 데 사용할 수 있습니다. PyTorch 모델을 TorchScript로 변환하면 성능 향상, 모델 크기 감소, 직접 Python 실행이 가능하지 않거나 효율적이지 않은 환경에서 모델을 배포하는 기능의 이점을 누릴 수 있습니다.

 

 

6. 그럼 ONNX와 torchscript의 차이가 뭐지?

프레임워크 통합: ONNX는 PyTorch, TensorFlow, Keras 등을 비롯한 다양한 딥 러닝 프레임워크 간의 상호 운용성을 지원하도록 설계된 크로스 프레임워크 형식입니다. ONNX는 모델에 대한 중립적인 중간 표현 역할을 하여 서로 다른 프레임워크 간에 모델을 교환하고 사용할 수 있습니다. 반면에 TorchScript는 PyTorch 에코시스템 내에서 PyTorch 모델을 표현, 최적화 및 배포하기 위해 특별히 설계된 PyTorch의 구성 요소입니다.

 

모델 표현: ONNX는 모델을 중간 계산 그래프로 나타냅니다. 특정 프레임워크와 독립적으로 모델의 구조와 작업을 캡처하여 서로 다른 프레임워크 간의 상호 운용성 및 변환을 허용합니다. TorchScript는 PyTorch 모델을 PyTorch 프레임워크 내에서 정적 형식의 그래프 기반 중간 표현으로 나타냅니다. PyTorch의 표현력을 유지하면서 PyTorch 모델을 배포 및 실행에 최적화된 형식으로 변환하는 방법을 제공합니다.

 

상호 운용성 및 이식성: ONNX는 상호 운용성에 중점을 두어 서로 다른 프레임워크에서 모델을 공유하고 사용할 수 있습니다. 다양한 딥 러닝 프레임워크 및 런타임 환경에서 모델 교환, 배포 및 추론에 사용할 수 있는 공통 형식을 제공합니다. 반면에 TorchScript는 PyTorch와 긴밀하게 통합되어 있으며 특히 PyTorch 에코시스템 내에서 최적화 및 배포 기능을 제공합니다. TorchScript는 다양한 플랫폼에 PyTorch 모델을 배포하는 데 사용할 수 있지만 PyTorch 프레임워크에 더 밀접하게 연결되어 있습니다.

 

에코시스템 및 도구: ONNX에는 ONNX 모델을 지원하는 다양한 도구, 라이브러리 및 런타임 환경을 갖춘 성장하는 에코시스템이 있습니다. 여기에는 다양한 하드웨어 플랫폼에서 ONNX 모델의 최적화된 실행을 제공하는 ONNX Runtime이 포함됩니다. PyTorch의 구성 요소인 TorchScript는 PyTorch 프레임워크 내에서 교육, 추론 및 배포를 위한 다양한 유틸리티를 포함하는 기존 PyTorch 에코시스템 및 도구의 이점을 제공합니다.

 

요약하면 ONNX는 서로 다른 프레임워크 간의 모델 상호 운용성에 중점을 두는 반면 TorchScript는 PyTorch에 고유하며 PyTorch 에코시스템 내에서 효율적인 배포 및 최적화 기능을 제공하는 pytorch의 구성 요소입니다. ONNX를 사용하면 프레임워크 간에 모델을 교환하고 사용할 수 있으며 TorchScript는 PyTorch 프레임워크 내에서 PyTorch 모델을 효율적으로 배포하고 실행하도록 최적화되어 있습니다. 두 형식 모두 고유한 강점이 있지만 ONNX와 TorchScript 중에서 선택하는 것은 특정 사용 사례, 배포 환경 및 각 프레임워크와의 통합 요구 사항에 따라 다릅니다.

 

 

 

결론 :

Pytorch는 동적 연산 그래프를 사용하는데 반해 Tensorflow는 정적 연산 그래프를 사용한다는 것.

위에서 설명된 이유로 인해, Pytorch 및 Tensorflow 모델은 변환 없이 바로 모바일에서 사용할 수 없으며, pytorch는 torchscript 혹은 onnx format으로 모델을 변환하여 모바일에서 사용 가능하고 tensorflow는 onnx 혹은 TFLite로 변환하여 모바일에서 사용 가능함. 또한, pytorch → onnx → Tensorflow → TFLite로도 변환이 가능함.

Comments