iPhone, iPad, Mac에서 Core ML을 사용한 더 빠른 Stable Diffusion
TL;DR
Apple과 Hugging Face는 새로운 Core ML 최적화, 구체적으로 6-bit 팔레트화 및 업데이트된 attention 레이어 구현을 도입하여 iPhone, iPad, Mac에서 Stable Diffusion이 더 빠르게 실행되고 메모리 오버헤드가 낮아지도록 했습니다. 이러한 개선으로 모델 가중치를 정밀도 손실이 최소인 상태로 크게 압축할 수 있어, 온디바이스 생성형 AI를 더 효율적으로 실행할 수 있습니다.
Core ML 최적화 및 6-Bit 팔레트화
Core ML은 Apple 기기의 CPU, GPU, Neural Engine을 활용하여 기기 내에서 머신러닝 모델을 실행합니다. Stable Diffusion과 같은 대용량 모델의 효율성을 높이기 위해 Apple은 coremltools.optimize 서브모듈을 통해 6-bit 팔레트화라는 새로운 압축 기술을 도입했습니다.
팔레트화 작동 방식
팔레트화는 모델 가중치를 16-bit 부동소수점 표현에서 파라미터당 6-bit로 압축하는 양자화의 한 형태입니다. 이는 컴퓨터 그래픽스의 색상 팔레트와 유사하게 작동합니다: 고정된 수의 색상(팔레트)이 정의되고, 이미지 색상은 해당 팔레트에서 가장 가까운 사용 가능한 색상의 인덱스로 대체됩니다.
메모리 및 실행 효율성
이전 Core ML 버전에서는 압축된 가중치가 디스크에서 로드될 때 압축이 풀려, 메모리 사용량이 압축되지 않은 모델 크기와 동일하게 유지되었습니다. 업데이트된 프레임워크는 이제 추론이 레이어에서 레이어로 진행됨에 따라 팔레트화된 가중치를 실시간으로 변환합니다. 이 접근 방식은 압축 풀기의 계산 부하를 증가시키는 대신 메모리 전송량을 줄여 실행 속도를 높입니다. 메모리 전송은 실행의 주요 병목 현상이기 때문입니다.
업데이트된 Stable Diffusion 구현
Apple의 ml-stable-diffusion 저장소는 diffusers 라이브러리를 기반으로 하며, 이러한 새로운 최적화를 포함하도록 업데이트되었습니다:
- 양자화 지원: 사용자는
--quantize-nbits플래그를 사용하여 모델을 8, 6, 4, 또는 2-bit로 양자화할 수 있습니다. 6-bit 양자화는 정밀도와 성능 사이의 최적 균형을 제공하므로 권장됩니다. - attention 레이어 최적화:
SPLIT_EINSUM_V2라고 하는 새로운 메서드는 쿼리 시퀀스를 512 크기의 청크로 나누어 큰 중간 텐서 생성을 방지합니다. 이 최적화는 Neural Engine에서 성능을 10%에서 30% 향상시킬 수 있습니다.
사용 가능한 최적화된 모델
| Model | Uncompressed | 6-bit Palettized |
|---|---|---|
| Stable Diffusion 1.4 | Core ML float16 | Core ML 6-bit 팔레트화 |
| Stable Diffusion 1.5 | Core ML float16 | Core ML 6-bit 팔레트화 |
| Stable Diffusion 2 base | Core ML float16 | Core ML 6-bit 팔레트화 |
| Stable Diffusion 2.1 base | Core ML float16 | Core ML 6-bit 팔레트화 |
배포 및 커스텀 모델 변환
시스템 요구 사항
6-bit 모델을 사용하려면 기기는 iOS/iPadOS 17 또는 macOS 14 (Sonoma) 의 개발 버전을 실행해야 합니다. 이들에는 필요한 업데이트된 Core ML 프레임워크가 포함되어 있기 때문입니다.
커스텀 모델 변환
개발자는 ml-stable-diffusion 저장소를 사용하여 파인튜닝된 또는 Dreambooth 모델을 변환할 수 있습니다. 과정은 다음과 같습니다:
coremltools7.0 베타 및 Xcode 15.0 베타 사용--quantize-nbits 6플래그를 사용하여torch2coreml변환 스크립트 실행ORIGINALattention 구현과SPLIT_EINSUM_V2중 선택 (일반적으로 macOS에서는ORIGINAL이 더 좋고, iOS에서는SPLIT_EINSUM_V2가 더 빠름)
고급 압축: 학습 시간 양자화
6-bit 팔레트화는 사후 학습 압축의 예시이지만, coremltools는 또한 학습 시간 압축을 도입합니다. 이를 통해 개발자는 가중치 압축을 동시에 수행하면서 모델을 파인튜닝할 수 있습니다. 가중치 클러스터링을 위한 미분 가능한 알고리즘을 사용하면, 학습 중에 양자화 테이블을 최적화하여 손실을 최소화할 수 있어, 사후 학습 방법보다 품질 저하가 적은 4-bit 또는 2-bit 압축을 가능하게 할 수 있습니다.