Connect with us

사상 리더

iOS에서 숨겨진 위험 피하기: ML의 명백하지 않은 함정 탐색

mm

ML이 필요합니까?

기계 학습은 패턴을 감지하는 데 탁월합니다. 깨끗한 데이터셋을 수집하는 데 성공하면 일반적으로 초인적인 성능의 ML 모델을 구축하는 데 시간 문제일 뿐입니다. 이는 분류, 회귀, 이상 감지와 같은 고전적인 작업에서 특히 사실입니다.

비즈니스 문제를 ML로 해결할 준비가 되면 ML 모델이 실행될 위치를 고려해야 합니다. 일부에서는 서버 인프라를 실행하는 것이 합리적입니다. 이는 ML 모델을 비공개로 유지하여 경쟁자가 따라잡기 어렵게 만듭니다. 또한 서버는 더 다양한 모델을 실행할 수 있습니다. 예를 들어, GPT 모델(CHATGPT로 유명한 ChatGPT)은 현재 최신 GPU가 필요하므로 소비자 기기는 고려할 수 없습니다. 반면에, 인프라를 유지하는 것은 khá 비용이 많이 들며, 소비자 기기가 모델을 실행할 수 있다면 더 많은 비용을 지불할 필요가 없습니다. 또한 사용자 데이터를 원격 서버로 보내서 처리할 수 없는 경우 개인 정보 보호 문제도 있을 수 있습니다.

그러나 고객의 iOS 기기를 사용하여 ML 모델을 실행하는 것이 합리적이라고 가정해 보겠습니다. 무엇이 잘못될 수 있나요?

플랫폼 제한

메모리 제한

iOS 기기는 데스크톱 기기에 비해 사용 가능한 비디오 메모리가 훨씬 적습니다. 예를 들어, 최신 Nvidia RTX 4080 Ti에는 20GB의 사용 가능한 메모리가 있습니다. 반면에, 아이폰은 “유니파이드 메모리”라고 하는 RAM의 일부와 공유되는 비디오 메모리를 가지고 있습니다. 참고로, 아이폰 14 프로에는 6GB의 RAM이 있습니다. 또한, 메모리의 절반 이상을 할당하면 iOS는 운영 체제가 반응성을 유지하도록 앱을 종료할 가능성이 rất 높습니다. 이는 신경망 추론을 위해 2-3GB의 사용 가능한 메모리만 사용할 수 있음을 의미합니다.

연구자들은 일반적으로 모델을 메모리 사용량보다 정확도를优先하여 훈련시킵니다. 그러나 속도와 메모리 사용량을 최적화하는 방법에 대한 연구도 있습니다. 따라서 덜 요구되는 모델을 찾거나 직접 훈련시킬 수 있습니다.

네트워크 레이어(연산) 지원

대부분의 ML 및 신경망은 잘 알려진 딥 러닝 프레임워크에서 나온 다음 CoreML 모델로 Core ML Tools를 사용하여 변환됩니다. CoreML은 Apple이 작성한 추론 엔진으로 Apple 기기에서 다양한 모델을 실행할 수 있습니다. 레이어는 하드웨어에 최적화되어 있으며 지원되는 레이어 목록은 khá 길기 때문에 이는 훌륭한 시작점입니다. 그러나 Tensorflow Lite와 같은 다른 옵션도 있습니다.

CoreML이 가능한 것을 보는 가장 좋은 방법은 Netron과 같은 뷰어를 사용하여 이미 변환된 모델을 확인하는 것입니다. Apple은 공식적으로 지원되는 모델을 나열하지만 커뮤니티 주도 모델 동물원도 있습니다. 지원되는 연산의 전체 목록은不断으로 변경되므로 Core ML Tools 소스 코드를 확인하는 것이 도움이 될 수 있습니다. 예를 들어, PyTorch 모델을 변환하려면 여기에서 필요한 레이어를 찾으려고 시도할 수 있습니다.

추가로,某些 새로운 아키텍처에는 일부 레이어에 대한 手書き CUDA 코드가 포함될 수 있습니다. 이러한 상황에서는 CoreML이事前 정의된 레이어를 제공할 수 없습니다. 그러나, GPU 코드를 작성하는 데熟練한 엔지니어가 있다면 자신의 구현을 제공할 수 있습니다.

전체적으로, 여기서 가장好的 조언은 모델을 훈련하기 전에 가능한早く CoreML로 변환하는 것입니다. 모델을 바로 변환하지 않은 경우, DL 프레임워크 또는 Core ML Tools 변환기 소스 코드의 신경망 정의를 수정하여 사용자 정의 레이어를 작성할 필요 없이 유효한 CoreML 모델을 생성할 수 있습니다.

검증

추론 엔진 버그

모든 가능한 레이어 조합을 테스트하는 방법은 없으므로 추론 엔진은 항상 일부 버그를 가지고 있습니다. 예를 들어, CoreML에서 확장된畳み込み가 너무 많은 메모리를 사용하는 경우가 흔하며, 이는 큰 커널이 0으로 채워진 잘못된 구현을 나타낼 수 있습니다. 또 다른 일반적인 버그는 일부 모델 아키텍처에 대한 잘못된 모델 출력입니다.

이 경우, 연산의 순서가 요인으로 작용할 수 있습니다. 활성화 및畳み込み 또는 残差 연결이 먼저 나오는지에 따라 결과가 다를 수 있습니다. 모든 것이 제대로 작동하는지 보장하는 唯一한 방법은 모델을 가져와 의도된 기기에서 실행한 다음 데스크톱 버전과 비교하는 것입니다. 이 테스트에서는 최소한 반쯤 훈련된 모델을 사용하는 것이 도움이 됩니다. 그렇지 않으면 숫자 오류가 잘못 초기화된 모델에 대해 기기와 데스크톱 간에 많이 누적될 수 있습니다. 최종 훈련된 모델은 잘 작동하지만, 랜덤으로 초기화된 모델의 경우 기기와 데스크톱 간의 결과가 khá 다를 수 있습니다.

정밀도 손실

아이폰은 추론을 위해 반정밀도 정확도를 광범위하게 사용합니다. 일부 모델은 부동 소수점 표현에서 비트 수가 적어도 인식할 수 있는 정확도 저하가 없지만, 다른 모델은 고통을 겪을 수 있습니다. 모델을 데스크톱에서 반정밀도로 평가하여 테스트 메트릭을 계산함으로써 정밀도 손실을 근사할 수 있습니다. 더好的 방법은 실제 기기에서 실행하여 모델이 의도한 대로 정확한지 확인하는 것입니다.

프로파일링

다른 아이폰 모델에는 다양한 하드웨어 기능이 있습니다. 최신 모델에는 신경 엔진 처리 장치가 개선되어 전체 성능을 크게 향상시킬 수 있습니다.它们는 특정 연산에 최적화되어 있으며, CoreML은 CPU, GPU 및 신경 엔진 간의 작업을 지능적으로 분배할 수 있습니다. Apple GPU도 시간이 지남에 따라 개선되었으므로 다른 아이폰 모델 간의 성능이 다를 수 있습니다. 모델을 지원하는 최소 기기에서 테스트하여 최대 호환성과 오래된 기기에서 허용되는 성능을 보장하는 것이 좋습니다.

또한, CoreML은 중간 레이어 및 연산을 최적화하여 성능을 크게 개선할 수 있습니다. 또 다른 요인으로는 때때로 데스크톱에서 성능이 더 나쁜 모델이 실제로 iOS에서 추론을 더 빠르게 할 수 있다는 것입니다. 이는 다양한 아키텍처를 실험하는 데 시간을 투자하는 것이 가치가 있음을 의미합니다.

さらに 최적화를 위해, Xcode에는 CoreML 모델専用 템플릿이 있는 좋은 Instruments 도구가 있으며, 모델 추론이 느려지는 이유에 대한 더 자세한 통찰력을 제공할 수 있습니다.

결론

누구도 iOS용 ML 모델을 개발할 때 가능한 모든 함정을 예측할 수 없습니다. 그러나, 어떤 것을 찾으면 피할 수 있는 몇 가지 실수가 있습니다. 모델을 가능한 早く 변환, 검증 및 프로파일링하여 모델이 올바르게 작동하고 비즈니스 요구 사항에 맞는지 확인하고, 위에 설명된 팁을 따라 성공을 빠르게 달성할 수 있습니다.

Konstantin Semianov, 는 Neatsy.AI의 CTO이며, 이는 아이폰 카메라만을 사용하여 정형외과 및 족부학 건강 문제를检测하는 세계 최초의 앱으로, AI 및 AR을 활용합니다. Neatsy.AI 이전에 그는 Lensa 앱의 제작사인 Prisma Labs에서 연구 개발 엔지니어로 근무했습니다.