WWDC 2025 - BNNS Graph의 주요 업데이트
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
인공지능
대상자
iOS 개발자, CPU 기반 머신러닝 모델 개발자, Swift 코드와 ML 통합이 필요한 엔지니어
핵심 요약
- BNNSGraphBuilder는 Swift로 작성된 ML 그래프를 CPU에서 직접 실행 가능하게 하여, 파일 기반 API의 한계를 극복
- 타입 안전성 및 런타임 유연성 제공 (예:
mean
,softmax
,topK
등 최적화된 연산 지원) - FP16 정밀도 사용 시 FP32 대비 성능 향상 가능 (예:
typealias PRECISION = Float16
)
섹션별 세부 요약
1. BNNS 개요
- BNNS는 CPU 기반 실시간 오디오 처리, 저지연 추론, 에너지 효율성에 최적화된 Apple의 ML 라이브러리
- BNNSGraph는 2024년에 도입된 네트워크 전체를 하나의 그래프 객체로 처리하는 구조
2. BNNSGraph의 주요 최적화
- 수학적 변환: 불필요한 연산 제거 (예:
slice
연산 최적화) - 레이어 퓨전:
convolution + activation
같은 연산을 단일 최적화된 연산으로 합침 - 메모리 공유: 텐서 메모리 할당 최적화 (예:
memory sharing
) - 가중치 재배치: 캐시 로컬리티 향상 (예:
weight repacking
)
3. BNNSGraphBuilder의 핵심 기능
- Swift 네이티브 통합:
- makeContext
단일 함수 호출로 그래프 정의 (예: let context = try BNNSGraph.makeContext { builder in ... }
)
- 타입 안전성 강제 (예: let result = bases.pow(y: exponents.cast(to: Float16.self))
)
- 런타임 유연성:
- Swift 코드와 그래프 연산 간 값 공유 가능
- mean
, softmax
, topK
등 연산 지원 (예: let softmax = x.softmax(axis: 1)
)
- vImage와의 제로-복사 통합: 이미지 처리 최적화 (예:
source.withBNNSTensor { src in ... }
)
4. 예제 코드
- 텐서 슬라이싱: Swift 서브스크립트 문법 사용 (예:
let cropped = src[...]
) - 이진화 연산:
mean
기반 임계값 처리 (예:let thresholded = src .> mean
) - 오디오 효과:
tanh()
와round()
를 활용한 비트 크러셔 효과
5. 적합한 사용 시나리오
- 작은 커스텀 ML 모델 개발
- 기존 모델의 전/후 처리 파이프라인 구축
- 실시간 오디오/이미지 처리
- 프로토타입 개발 및 실험
결론
- BNNSGraphBuilder는 Swift에서 ML 그래프를 직접 작성할 수 있게 하여, 파일 기반 API의 중간 컴파일링 단계를 생략하고 성능과 안정성을 동시에 확보
- FP16 정밀도 사용 시 성능 향상과 메모리 사용량 감소 효과
- 대규모 모델이나 외부 소스로 자주 업데이트가 필요한 경우 파일 기반 API 사용 권장