iOS 온디바이스용 딥러닝 모델 개선 완료했네요.
페이지 정보

본문
안녕하세요.
제주에서 앱 개발하는 리안입니다.
지난번에 모델 개선한다고 글을 올렸었는데
(https://damoang.net/development/1459?sfl=mb_id,0&stx=google_8e460883)
실제 앱에 적용한 결과가 드디어 릴리즈 됐네요.
(작년 말부터 2달 동안의 삽질 ㅠㅠ)
지난번에 글을 쓰고도 실제 릴리즈할 수 있는 수준의 온디바이스에 돌릴 모델을 만드는데는 한달이 더 걸렸네요 ㅠ
사실 아직도 맘에 들진 않아서 개선 준비중이긴 합니다 ㅎㅎ;;
과정을 정리해서 블로그에 글을 올렸는데
https://velog.io/@likoapps/배경제거-카메라-화질-개선-프로젝트-회고
iOS 앱에 딥러닝 모델 올릴 때 참고하시면 좋겠습니다.
글에는 못 쓴게 있는데, (너무 주절주절 해서...)
---
1. 뉴럴 엔진에서 로드 오래걸리는 것
iOS 기기에는 계산 유닛이 CPU/GPU/NE (뉴럴 엔진) 3가지를 이용할 수 있는데,
NE 모델을 돌리려면 최초에 컴파일 하는 과정 (프리히팅)이 필요한데
이게 생각보다 꽤 오래 걸립니다.
제가 만든 최종 모델이 겨우 6.8메가 짜리인데 아이폰 15프로에서 최초에 로드 시간이 약 20초가 넘게 걸립니다. (컴파일 시간 포함)
그 이후에는 로드 시간이 1초가 안걸리는데 최초 한번이 엄청 오래걸립니다.
stackoverflow 같은데 보면 이런 질문글이 있는데
GPU로 로드하면 최초에도 3초 정도가 걸리고, 그 이후에는 로드에 약 1.5초 정도 걸립니다.
그래서 최초 NE 로드 (+컴파일) 하는 중에 그 사이 추론이 필요하면 GPU로 로드해서 추론하는 식으로 처리한다는 글이 있습니다.
저도 비슷하게, 최초 추론 시점에는 NE 로드 중인걸 확인하면 GPU로 로드하도록 처리했습니다.
2. coremltools convert 할 때 target os 를 iOS 17 / 18 뭘로 하냐에 따라 속도가 달라집니다.
iOS 18을 타겟으로 했을 때 속도가 훨씬 빠릅니다.
그래서 저도 그냥 iOS18 타겟으로 model 변환을 했습니다.
3. 온디바이스 모델을 학습 시킬 때 시간이 많다면 m1 pro 이상의 맥북으로도 충분한거 같습니다.
온디바이스 모델 특성상 m1 pro 로 일주일 시간 학습 시간이 필요하다면 모바일에서 돌리기에 무리인 모델이라고 볼 수 잇을거 같습니다.
그래서 모델 학습 시켜서 일주일 넘게 걸린다면 경량화를 고민 해야봐야할거 같습니다.
(모델에 따라 ... 로드 / 추론 시간이 오래 걸려도 되는 형태라면 상관없겠지만요. ㅎㅎ)
----
끝!
리코리안님의 댓글의 댓글
까만거북이님의 댓글

그냥 껍데기 앱만 만드는 저는 참 쉽죠? 같은 느낌이네요.ㅋㅋㅋ 후기 나눠주셔서 감사합니다. 🙇♂️
리코리안님의 댓글의 댓글
도움이 되셨으면 좋겠네요. 감사합니다.
담왕님의 댓글
어지간히 오래걸리는게 아니면 실행시나리오에 따라 사용자는 못느끼도록 잘 끼워넣으면 되지 않을까... 하는게 저같은 어플 개발자 생각인데
역시 깊게 파고드는 분들은 다르구나 싶네요