엔지니어링 조사: Laya의 트랜스포머를 ANE로 옮기기
연구 환경: Apple M3 Max(40 GPU 코어, 128 GiB 통합 메모리), macOS 27.2, Core ML
Tools 9.0, PyTorch 2.7.0 및 NumPy 2.1.3. 이는
experiments/ane_engineering/ 아래의 독립 프로토타입이며, 릴리스된 런타임은
변경되지 않았습니다.
현재 결과
고정된 B=1, L=96 다국어 프로토타입은 Core ML의 예상 컴퓨트 계획에서 전체
인코더, 결정 헤드, 스코어러를 성공적으로 Neural Engine에 할당합니다. 6,390개의
비상수 연산이 ANE를 우선하며, 추정 비용 가중치의 합은 약 1입니다. 나머지
3,809개 항목은 상수입니다. 원래의 열거형 셰이프/SDPA 내보내기는
CPU_AND_NE에서 할당된 1,318개 연산 전부를 CPU 우선으로 두었고, 988개의 개별
연산이 지원 기기로 ANE를 나열했음에도 그랬습니다.
프로토타입의 완전한 예측 경로는 50회 스크리닝 호출에서 5.167 ms p50을 측정했으며, 토크나이즈, 임베딩 조회, 어텐션 마스크, ANE 추론, CPU 액션 헤드 계산, 캘리브레이션, 포매팅을 포함합니다. 고립된 Core ML 본체는 합성 임베딩으로 30회 호출에서 4.403 ms p50을 측정했습니다. 후자는 컴포넌트 측정이며 종단 간 속도 주장이 아닙니다. 모델 로딩과 컴파일은 두 웜 타이밍 모두에서 제외됩니다.
원래 FP32 골든 레퍼런스의 고정 길이 부분집합에서 59/59 답 비교가 일치하며, 여덟 개 언어와 choice/score/noul 질문을 포함합니다. 가장 큰 캘리브레이션 확률 변화는 0.002925이고, 공개 호출 100회를 반복해도 유한하며 반올림된 결과가 동일하게 반환됩니다. 원래 63문항 픽스처에는 1,024토큰 장문 입력 세 개와 147토큰 20선택지 입력 하나가 있으며, 이 네 평가는 L96 내보내기에서 명시적으로 건너뜁니다. 이 픽스처에는 반복되는 루브릭이 있습니다. 이는 회귀 비교이며, 59개의 독립적으로 레이블된 예시나 변경되지 않은 일반 작업 정확도의 증명이 아닙니다.
별도의 L192 및 L1024 내보내기도 6,390개의 할당된 본체 연산 전부를 ANE에 둡니다. L192는 60/60 비교를 통과하고, L1024는 완전한 63/63 골든 픽스처를 통과합니다. 둘 다 공개 호출 100회를 반복해 통과하며 최대 캘리브레이션 확률 오차는 0.002925로 남습니다. 장문 입력 부분집합 자체의 최대 오차는 0.001128입니다. 평가된 모든 토큰 사용량 수는 레퍼런스와 일치합니다.
| 고정 시퀀스 용량 | 평가된 / 전체 픽스처 질문 | 본체 p50, 합성 입력 | 이 용량에서의 완전 짧은 질문 p50 | 최초 컴파일/로드 |
|---|---|---|---|---|
| 96 | 59 / 63 | 4.403 ms | 5.167 ms | 18.77 s |
| 192 | 60 / 63 | 7.136 ms | 8.178 ms | 19.59 s |
| 1024 | 63 / 63 | 78.405 ms | 88.433 ms | 22.55 s |
이는 백엔드 간 페어링 비교가 아니라 직렬 스크리닝 실행입니다. 본체 타이밍은 워밍업 5회와 측정 30회를 사용하고, 완전 짧은 질문 타이밍은 워밍업 10회와 측정 50회를 사용합니다. 완전 경로는 호스트 작업과 입력 검사를 포함합니다. L96 스크린은 최종 추가 입력 검증보다 앞서며, 최종 통제 비교는 현재 어댑터를 사용하고 그 소스 지문을 기록합니다. 컴파일/로드 시간은 변환 후 각 프로세스에서 측정되며, 빈 프레임워크 캐시로 최초 시스템 시작을 보장하는 약속이 아닙니다. 큰 고정 그래프는 짧은 요청에도 패딩된 작업을 수행합니다. 실용적인 어댑터는 별도의 길이 버킷을 선택할 것입니다. 모든 요청을 L1024로 라우팅하면 짧은 입력의 이점을 버리게 됩니다.
실제 workload(1, long=True) 픽스처를 별도로 실행한 결과, 짧은 요청을 그
크기로 패딩한 것이 아니라 하나의 1,024토큰 요청임을 확인했습니다. 워밍업
호출 열 번 후 50회 완전 예측에서 91.703 ms p50 / 94.776 ms p95를 측정하며,
모든 반올림 출력이 안정적으로 유지됩니다. 역사적 MLX 장문 입력
벤치마크는
51.98 ms p50입니다. 이는 같은 라운드의 페어링 측정은 아니지만, 이 스크린은 현재
ANE 그래프가 장문 입력을 가속한다는 증거를 제공하지 않습니다. 입력 해시, 실제
토큰 길이, 현재 실험 지문, 원시 타이밍은
long1024-performance.json에
보존됩니다.
원시 증거:
- 완전 본체 컴퓨트 계획과 컴포넌트 타이밍
- 실제 입력 FP32 레퍼런스 검증과 완전 예측 타이밍
- L192 검증
- L1024 완전 픽스처 검증
- 단일 계층 계획과 수치 검사
- 단일 MLP 계획과 수치 검사
MLComputePlan은 예상 배치를 설명하며, 하드웨어 실행 트레이스가 아닙니다.
CPU_AND_NE는 CPU와 ANE를 허용하며, ANE 전용 스위치가 아닙니다. 이 실험에서
할당된 무거운 본체 연산은 모두 ANE를 우선하지만, 런타임 하드웨어 텔레메트리는
별도로 평가됩니다. 뒤이은 Instruments 진단이 Neural Engine 하드웨어 활동을
기록했지만, 그 테이블은 전역이라 모든 이벤트를 이 모델에 귀속시킬 수 없습니다.
페어링된 MLX 비교, 전력 적분 결과, 트레이스 한계는
ANE_BENCHMARKS.md에 보고됩니다. 모니터링 도구의 0값 ANE
카운터는 이 OS/기기에서 그 카운터를 검증하지 않고서는 ANE 활동의 부재를 입증할
수 없습니다.
왜 원래 그래프가 ANE에 부적합했는가
기준선은 전통적인 B×L×C 트랜스포머 레이아웃, 동적 셰이프 연산, 전체 헤드를 한 번에 배치한 어텐션, Core ML의 SDPA 연산자를 보존합니다. CPU/ANE 선택에서 그 계획은 보고된 기기 할당이 없는 24개의 SDPA 연산과 함께 다수의 캐스트, 슬라이스, 셰이프 쿼리, gather, transpose를 포함합니다. 일부 개별 연산은 ANE를 지원하지만, 그래프 전체가 ANE로 분할되지는 않습니다. 따라서 개별 연산자에 대한 기기 지원만 으로는 유용한 ANE 실행 경로의 충분한 증거가 되지 않습니다.
성공한 프로토타입은 여러 가지를 함께 바꿉니다. 그것은 그 조합이 ANE 배치를 가능하게 한다는 증거이며, 단 하나의 문제 연산자를 규명하는 완료된 절제 실험이 아닙니다. 고정 셰이프 원래 레이아웃 SDPA와 명시적 어텐션 대조군이 다음 단계의 유용한 판별 실험입니다.
Apple이 공개한 Transformer 지침은 채널 우선 4D 텐서, 투영을 위한 1×1 합성곱, 헤드별 어텐션, 더 적은 레이아웃 복사를 권장합니다. 이 원칙들이 구현에 동기를 주었습니다. Apple의 역사적인 DistilBERT 속도 향상은 이 프로젝트의 이미 빠른 MLX FP16 기준선 대비 10× 개선을 입증하지 않습니다. Apple의 ANE Transformer 글, Apple의 레퍼런스 구현.
프로토타입 아키텍처와 수치 계약
model.py는 원래 체크포인트 매개변수로부터 만든 별도의 내보내기 모델입니다.
- 은닉 활성화는 B,C,1,L을 사용합니다. 각 덴스 가중치
W[out,in]은 재학습이나 가중치 근사 없이 1×1 합성곱 커널K[out,in,0,0]이 됩니다. - 어텐션은 개별 64채널 헤드로 나뉩니다. key 텐서는 한 번 transpose되고, 두 개의 명시적 einsum이 4D 레이아웃을 유지한 채 QK와 AV를 계산합니다. Softmax는 key 축인 차원 1에 대해 실행됩니다.
- RoPE는 각 헤드를 두 개의 32채널 절반으로 나눕니다. 그 코사인, 사인, 베이스는 다국어 로컬 theta 160000을 포함해 원래 모델에서 가져옵니다.
- 채널 정규화는 원래의
normalized * weight + bias순서와 epsilon을 보존합니다. Apple의 레퍼런스 LayerNorm에 있는 순서가 다른 affine 표현이나 선택적 클리핑을 복사하지 않습니다. - 첫 인코더 어텐션 norm은 항등으로 남고, 인코더는 정확한 erf GELU를 사용하며, 두 결정 헤드 FFN은 ReLU를 유지합니다.
- 완전 어텐션과 슬라이딩 윈도 마스크는 유효 키 마스킹과 패딩된 쿼리 규칙을
보존합니다. 로컬 반경은
local_attention // 2에서 읽습니다. - 최종 마커 gather는 외부에서 준비한 원-핫 선택자와 4D einsum으로 표현됩니다. 그래프는 비활성 슬롯을 포함해 32개의 마커 슬롯을 유지하며, 호스트는 비활성 로짓을 원래 값 -1e4로 대체합니다.
전체 원래 FP32 인코더 계층 하나와 그 BC1S 대응물은 PyTorch 레이아웃 검사에서
기껏해야 2.29e-5만큼 차이가 났습니다. FP16 Core ML 계층 출력 오차는 이
정밀도/백엔드 변경에서 예상대로 더 컸습니다. 본체 프로브는 원래 자기 비교를
포함했는데, 그 잘못된 증거는 제거되었고 전체 본체 PyTorch 레이아웃 검사는
명시적으로 not_measured입니다. 실제 전체 모델 검증은 대신 저장된 원래 FP32
로짓과 결정을 대상으로 합니다.
test_ane_layout.py의
독립적인 CPU 회귀는 추가로 완전한 소형 ConvBody를 원래 DecisionModel과
비교하며, 명시적 및 SDPA 어텐션 오라클, 세 가지 질문 유형, 변경된 패딩 값, 0이
아닌 norm bias, 여러 RoPE 베이스, 기본값이 아닌 norm epsilon을 사용합니다. 이
테스트는 레이아웃과 마스킹 의미를 다루되, 전체 체크포인트 FP16 하드웨어 정밀도와
혼동하지 않습니다. 다섯 개 레이아웃 테스트 모두 로컬에서 통과했습니다.
어텐션 프로토타입은 유한한 -1e4 마스크 bias를 추가합니다. 이는 유한한 검증 활성화에서 의도한 마스크 동작을 보이지만, 임의의 극단 입력에서 마스킹된 점수를 -1e4 또는 -무한대로 대체하는 것과 비트 단위로 동일하지는 않습니다. 마찬가지로 Core ML FP16 실행이 원래 FP32 모델과 비트 단위로 동일하다고 주장하지 않습니다.
runtime.py는 전체 트랜스포머에 대해 계층마다 기기 전환을 하는 대신 하나의 CPU→ANE→CPU 경계를 제공합니다.
- CPU는 각 질문을 토크나이즈하고, 요청된 임베딩 행만 모으고, 고정 셰이프 가산 마스크, 타입 벡터, 마커 선택자를 구성합니다. 질문 간에 문맥 은닉 상태나 K/V를 재사용하지 않습니다.
- Core ML 호출 하나가 임베딩 정규화, 22개 인코더 계층 전부, 두 결정 헤드 계층, 스코어링 합성곱을 수행합니다.
- CPU는 캘리브레이션되지 않은 원시 로짓 softmax에서 액션 특징을 도출하고, erf GELU와 함께 FP32로 소형 원래 액션 헤드를 실행합니다. 그런 다음 공개 캘리브레이션과 출력 포매팅이 기존 구현을 사용합니다.
내보낸 본체는 FP16 연산이고, 소형 호스트 액션 헤드는 FP32입니다. 임베딩 조회는 원래 저장된 가중치를 사용합니다. 소스 safetensors 파일은 169개의 FP16 텐서와 하나의 FP32 텐서를 담고 있습니다. “FP32 레퍼런스”는 원래 PyTorch 실행을 가리키며, 원래 체크포인트가 전부 FP32로 저장된다는 주장이 아닙니다. 이 혼합 정밀도 경계는 프로토타입 수치 계약의 일부입니다. 포화된 픽스처에서 액션 확률 차이가 0인 것은 액션 로짓 동일성을 증명하지 않습니다.
어댑터는 호환되지 않는 패키지 차원, 범위를 벗어난 ID/마커, 잘못된 마스크 값, 빈 어텐션 키 행, 고정 용량을 초과하는 입력 길이를 거부합니다. 기본 입력 한도는 96토큰이고 배치 크기는 1이며, 여러 질문은 순차적으로 실행됩니다. 더 짧은 내보내기에 맞추려고 요청을 조용히 잘라내지 않습니다.
재현, 출처 및 품질 게이트
저장소 루트에서 고정된 .venv로 실행하십시오. 생성된 패키지는 Git에서
무시되며, 중복 임베딩 NPZ나 대형 가중치 아티팩트가 필요하지 않습니다.
probe.py는 기존 출력 디렉터리를 거부합니다. 새 내보내기는 원래 가중치/구성
SHA256 값, 패키지 콘텐츠 해시, 셰이프, 도구 버전, 실험 소스 지문을 매니페스트에
기록합니다.
재현 명령은 artifacts/ane-repro/ 아래에 씁니다. 커밋된 실험 디렉터리에 이미
보고서와 매니페스트가 들어 있기 때문입니다. 내보내기를 반복할 때는 다른 새
디렉터리를 고르십시오. 어느 내보내기도 기존 패키지를 조용히 재사용하지
않습니다.
변환, 개발, 압축 연구 의존성은 pip install -e '.[convert,dev,research]'로
설치하십시오(또는 그에 해당하는 uv sync extras). 연구 extra는
kmeans1d==0.4.0을 고정하며, 이 선택적 의존성은 FP16 그룹형 K-means 실험에
사용되고 새 매니페스트에 기록됩니다.
기본적으로 변환은 laya-multilingual을 저장소에 고정된 Hugging Face
체크포인트로 해석하고 필요할 때 다운로드합니다. 기존 로컬 파일을 쓰려면
--source /path/to/checkpoint를 전달하십시오. 검증은 기본적으로 패키지
매니페스트에 기록된 소스 디렉터리를 사용합니다. ANEAgent 런타임 자체는 로컬
파일만 받아들이며, 로드 전에 원래 가중치/구성 해시, 고정 셰이프, 패키지 콘텐츠
해시를 검증합니다. 검증은 또한 소스 가중치 해시가 다른 골든 레퍼런스를
거부합니다. 측정된 다국어 소스 가중치 SHA256은
9d628fd971b700382ac6f65920a86f149777b2e748e0c955fb3b19695aa8f204입니다.
# Small placement probes, then the complete model.
.venv/bin/python -m experiments.ane_engineering.probe \
--kind mlp --length 96 --output artifacts/ane-repro/mlp96
.venv/bin/python -m experiments.ane_engineering.probe \
--kind layer --length 96 --output artifacts/ane-repro/layer96
.venv/bin/python -m experiments.ane_engineering.probe \
--kind body --length 96 --output artifacts/ane-repro/body96
.venv/bin/python -m experiments.ane_engineering.validate \
--package artifacts/ane-repro/body96/model.mlpackage \
--length 96 --repeats 100 \
--output artifacts/ane-repro/validation96.json
검증기는 평가된 모든 argmax 결정이 일치하고, 캘리브레이션 및 액션 확률 오차가
<=0.02이며, 출력이 유한하고, 토큰 사용량이 변하지 않으며, 반복된 공개 출력이
동일할 것을 요구합니다. 실패한 후보는 passed: false를 쓰고 비정상 종료합니다.
건너뛴 사례는 고정 셰이프 부분집합이 통과하더라도 검증되지 않은 채로 남습니다.
최초 L96 보고서는 측정 후 이 게이트들을 명시적으로 적용했으며, 기록된 타이밍을
바꾸지 않고 그에 맞게 표시됩니다.
더 긴 고정 내보내기와 그 완전한 골든 레퍼런스 검증 명령:
.venv/bin/python -m experiments.ane_engineering.probe \
--kind body --length 192 --output artifacts/ane-repro/body192
.venv/bin/python -m experiments.ane_engineering.validate \
--package artifacts/ane-repro/body192/model.mlpackage --length 192 \
--output artifacts/ane-repro/validation192.json
.venv/bin/python -m experiments.ane_engineering.probe \
--kind body --length 1024 --output artifacts/ane-repro/body1024
.venv/bin/python -m experiments.ane_engineering.validate \
--package artifacts/ane-repro/body1024/model.mlpackage --length 1024 \
--output artifacts/ane-repro/validation1024.json
.venv/bin/python -m experiments.ane_engineering.benchmark \
--package artifacts/ane-repro/body1024/model.mlpackage --length 1024 --long \
--output artifacts/ane-repro/long1024-performance.json
이 명령들은 위에 나열된 독립적으로 검사된 더 긴 내보내기를 재현합니다. 그 배치와 수치 충실도는 L96 그래프와 별도로 검사되었으며, 짧은 요청을 1024토큰으로 패딩하는 것은 제안된 프로덕션 정책이 아닙니다.
압축 스크리닝과 10× 목표
palettize.py는
독립적인 가중치 전용 팔레트 변형을 준비하며, 8비트 균일 조회 테이블을 저렴한 첫
스크리닝 후보로 삼습니다. 2048개 원소보다 큰 합성곱 가중치만 선택됩니다. RoPE
상수, 정규화, 활성화 수학, 호스트 액션 가중치는 변경되지 않습니다. 그룹화된 출력
채널은 별도의 조회 테이블을 사용합니다. K-means는 더 비싼 모드입니다. 이
FP16 그룹에는 설치된 kmeans1d 구현을 사용합니다. Core ML Tools 9.0은
num_kmeans_workers > 1일 때 프로세스 풀 starmap으로 독립 그룹을 병렬화하며,
실험은 오프라인 K-means에 워커 여덟 개를, 워커당 수학 라이브러리 스레드 하나를
사용합니다. 워커 수는 내보내기 처리량을 바꿀 뿐, 의도한 코드북 목표를 바꾸지
않습니다. 더 낮은 비트의 6/4비트 후보는 정확한 구현이 아니라 별도의 근사
아티팩트입니다.
압축 크기는 내보낸 트랜스포머 본체 패키지를 가리킵니다. 원래 196.608백만 항목 임베딩 테이블은 호스트에 남아 있고 요청마다 요청된 행만 조회되며, 소형 호스트 액션 가중치는 변경되지 않습니다. 본체 패키지가 대략 절반이 되는 것은 전체 체크포인트, 런타임 메모리, 요청당 에너지가 절반이 되는 것이 아닙니다.
.venv/bin/python -m experiments.ane_engineering.palettize \
--package artifacts/ane-repro/body96/model.mlpackage \
--bits 8 --mode uniform --group-size 32 \
--output artifacts/ane-repro/body96-w8
.venv/bin/python -m experiments.ane_engineering.validate \
--package artifacts/ane-repro/body96-w8/model.mlpackage --length 96 \
--output artifacts/ane-repro/validation96-w8.json
# Independent K-means candidates; inspect each validation exit status.
for bits in 8 6 4; do
VECLIB_MAXIMUM_THREADS=1 OPENBLAS_NUM_THREADS=1 OMP_NUM_THREADS=1 \
.venv/bin/python -m experiments.ane_engineering.palettize \
--package artifacts/ane-repro/body96/model.mlpackage \
--bits "$bits" --mode kmeans --group-size 32 --workers 8 \
--output "artifacts/ane-repro/body96-w${bits}km"
.venv/bin/python -m experiments.ane_engineering.validate \
--package "artifacts/ane-repro/body96-w${bits}km/model.mlpackage" --length 96 \
--output "artifacts/ane-repro/validation96-w${bits}km.json"
done
두 균일 W8 스크린 모두 59개 픽스처 argmax 결정을 전부 유지하고 반복 호출 100회를 통과하지만, 확률 게이트를 통과하지 못합니다. 그룹 크기 32는 0.023612 오차에 도달하고 그룹 크기 4는 0.033858에 도달합니다. W8 K-means/group32 스크린은 최대 오차 0.014393과 59/59 결정으로 통과합니다. 포화된 액션 확률은 그 K-means 후보의 액션 로짓 차이를 최대 16.24까지 감춥니다. 이 작은 회귀 픽스처를 통과하는 것은 보존된 일반 캘리브레이션이나 작업 정확도를 입증하지 않습니다. 압축 후보는 별도로 식별된 근사 모델로 남습니다.
고정 W6 K-means/group32 후보도 59/59 argmax 결정과 안정적 반복 출력을 유지하지만, 최대 확률 오차 0.052243으로 실패합니다. 최대 액션 로짓 오차는 76.62입니다. 따라서 가중치를 6비트로 줄이는 것은 짧은 요청 스크리닝 지연 시간이 FP16에 가깝게 유지되더라도 변경되지 않은 수용 게이트를 충족하지 못합니다.
W4 K-means/group32도 59/59 결정을 유지하지만, 최대 확률 오차는 0.200221로, 최대 액션 로짓 오차는 605.30으로 올라갑니다. 같은 게이트에서 실패합니다. 다섯 압축 스크린 모두에서 argmax 변화가 없다는 사실은 이 픽스처의 포화된 결정만으로는 불충분한 수용 테스트임을 보여줍니다.
| L96 변형 | 본체 패키지, 십진 MB | 최대 캘리브레이션 확률 오차 | 완전 예측 스크리닝 p50 | 품질 게이트 |
|---|---|---|---|---|
| FP16 | 251.91 | 0.002925 | 5.167 ms | 통과 |
| W8 균일, 그룹 32 | 129.29 | 0.023612 | 4.923 ms | 실패 |
| W8 균일, 그룹 4 | 146.06 | 0.033858 | 5.420 ms | 실패 |
| W8 K-means, 그룹 32 | 129.29 | 0.014393 | 4.792 ms | 통과 |
| W6 K-means, 그룹 32 | 96.23 | 0.052243 | 4.841 ms | 실패 |
| W4 K-means, 그룹 32 | 64.52 | 0.200221 | 5.001 ms | 실패 |
모든 압축 변형은 6,390개의 NE 우선 기기 할당 연산, 59/59 픽스처 argmax 일치, 100회 안정 반복 호출을 유지합니다. 나머지 계획 항목에는 상수와 가중치-LUT 재구성 표현이 포함되며, 배치 메타데이터만으로는 요청 중 압축 데이터가 DRAM에서 얼마나 이동하는지 증명하지 못합니다. 세 K-means 내보내기는 워커 여덟 개로 각각 186.50, 56.13, 23.90초가 걸립니다. 설정과 워커 프로세스는 모든 추론 측정 전에 끝납니다.
이 50회 직렬 스크린은 속도 향상 비율을 입증하지 않습니다. FP16 스크린은 마지막 입력 검증보다 앞서며, 스크린들은 교차 실행되지 않았습니다. W8 K-means는 ANE_BENCHMARKS.md에서 더 강한 동일 세션 비교를 위한 유일한 압축 최종 후보입니다. 거부된 변형은 권장 배포가 아니라 정밀도 경계의 증거로 보존됩니다. 압축은 이 다국어 L96 부분집합에 대해서만 검증되었으며, 위의 63문항 L1024 결과는 별도의 FP16 내보내기에 관한 것입니다.
Core ML 팔레트 압축은 인덱싱된 조회 테이블에서 부동소수점 가중치를 재구성하며, 저장 텐서가 작다는 것만으로 더 빠른 추론이나 더 낮은 에너지를 입증하지 못합니다. 모든 변형은 동일한 정밀도 게이트, 새 컴퓨트 계획, 페어링된 종단 간 속도/에너지 비교가 필요합니다. Core ML 팔레타이제이션 문서.
최초의 성공적인 ANE 배치는 개연성 있는 최적화 경로를 확립하며, 10× 결과가 아닙니다. 비교는 더 빠른 경우 그 컴파일 변형을 포함한 MLX FP16을 사용하고, 동일한 작업 범위를 보고해야 합니다. 전력은 완전한 요청에 대해 적분해야 합니다. 총 시스템 에너지와 유휴 차감 추정치 모두 그 측정 한계와 함께 보고해야 합니다. 독립적인 수학 검토는 ANE_MATH.md입니다.
수동 구현이 확립하는 것
여기서 유용한 수동 작업은 계산 그래프를 Core ML이 ANE로 매핑할 수 있는
레이아웃으로 완전하게, 독립적으로 검증하며 다시 작성한 것입니다. 이는 학습된
매개변수를 유지한 채 실행 배치를 바꿉니다. 원래 그래프에서 compute_units를
바꾸는 것보다 훨씬 효과적입니다. 24개의 순차 어텐션/MLP 블록이나 그 덴스 투영
작업을 제거하지는 않습니다.
장문 요청에 대한 다음 정확한 후보는 실제로 로컬 윈도만 방문하는 어텐션으로, 고정 쿼리/key 타일과 원래 패딩 및 RoPE 규칙으로 구현됩니다. 현재 그래프는 여전히 덴스 점수 행렬을 계산하고 로컬 마스크를 적용합니다. 타일 그래프는 그 작업을 줄일 수 있지만, 더 많은 슬라이스, 경계, 소형 축약이 ANE 스케줄링을 약화시킬 수 있으며, 그 배치, 정밀도, 종단 간 이점은 아직 측정되지 않았습니다. 추가 가중치 압축은 위의 실패 이후 캘리브레이션이나 품질 회복을 필요로 합니다. 증류나 더 적은 계층은 새 모델을 도입하고 더 넓은 작업 품질 평가를 요구할 것입니다. 구현되지 않은 이 방향 중 어느 것도 오늘 10× 이득의 증거를 제공하지 않습니다.