Instalar, descarregar e tomar decisões tipadas
O Laya-CoreML corre em Apple Silicon com macOS 15+ e Python 3.11–3.13. As verificações locais da versão usam M3 Max / macOS 27.2. Versões mais antigas do macOS e a implementação em iOS não foram testadas aqui. Os ML Programs exportados visam macOS 15 / iOS 18.
python -m pip install laya-coreml
# Terminal demo and recording renderer:
python -m pip install 'laya-coreml[demo]'
A inferência instala Core ML Tools, NumPy, Tokenizers, Safetensors e Hugging Face
Hub. Não exige PyTorch, Transformers nem MLX. O extra opcional [convert] instala
o PyTorch para exportar os checkpoints originais.
Selecionar um modelo
Pacote do Hugging Face em aac6fef/ |
Dispositivo predefinido | Capacidade total de entrada | Lote / opções | Utilização pretendida |
|---|---|---|---|---|
| laya-coreml | CPU + GPU | 512 tokens | 1 / 32 | Laya inglês, 421M |
| laya-multilingual-coreml | CPU + GPU | 1024 tokens | 1 / 32 | Multilingue de uso geral, 322M |
| laya-typed-decisions-coreml | CPU + GPU | 1024 tokens | 1 / 32 | Checkpoint typed-decisions do upstream |
| laya-multilingual-coreml-snake | CPU + GPU | 64 tokens | 3 / 4 | Prompts compactos do Snake agrupados |
| laya-multilingual-coreml-ane | CPU + ANE | 96 tokens | 1 / 32 | Decisões curtas, corpo FP16 |
| laya-multilingual-coreml-ane-w8 | CPU + ANE | 96 tokens | 1 / 32 | Pesos de paleta W8 aproximados, cálculo FP16 |
Os pacotes ANE incluem os seus próprios pesos de embedding/ação do anfitrião e o corpo Core ML inalterado. Não precisam de um diretório de checkpoint original. A capacidade de 96 tokens inclui a pergunta, as descrições das opções, os marcadores especiais e o estado. Estas exportações curtas rejeitam um pedido que não caiba. Os modelos de uso geral mantêm o truncamento de estado do upstream no seu limite de contexto total do checkpoint; as descrições das opções também usam o orçamento original do prefixo da pergunta.
API de Python
import laya_coreml as laya
agent = laya.load("aac6fef/laya-multilingual-coreml")
result = agent.predict(
"The customer asks for a refund of a duplicate payment.",
{
"department": {
"type": "choice",
"instructions": "Which department should handle this request?",
"criteria": {
"billing": "Payments, invoices, refunds, and duplicate charges.",
"technical": "Broken features, errors, and product troubleshooting.",
"sales": "Pricing, upgrades, and new purchases.",
},
},
"urgency": {
"type": "score",
"instructions": "How urgent is the request?",
"criteria": ["low", "medium", "high"],
},
"refund": {
"type": "noul",
"instructions": "Does the customer request a refund?",
},
},
)
print(result["answers"])
print(result["usage"]) # output_tokens is always 0
choice devolve uma etiqueta selecionada e uma probabilidade para cada etiqueta.
score devolve o índice de categoria esperado com base zero, a sua legenda e as
probabilidades. noul devolve a probabilidade de verdadeiro. As respostas também
incluem campos de confiança e de probabilidade da cabeça de ação do upstream.
Estas estimativas podem estar erradas; a validação da biblioteca mede a fidelidade
de conversão, não a exatidão da aplicação.
predict e system_one são aliases. Um estado em dicionário é serializado usando
as convenções de entrada originais. As perguntas são processadas por ordem de
inserção. A maioria das exportações usa lote um; várias perguntas exigem, portanto,
várias chamadas ao modelo. A exportação Snake GPU agrupa até três. O codificador
bidirecional não coloca em cache o estado contextual entre perguntas diferentes.
Descarregar uma vez e trabalhar depois offline
hf download aac6fef/laya-multilingual-coreml-ane --local-dir models/ane
agent = laya.load("./models/ane", local_files_only=True)
# Or use a previously downloaded shared Hub cache:
agent = laya.load("aac6fef/laya-multilingual-coreml-ane", local_files_only=True)
Os IDs remotos são descarregados antes da inicialização, a menos que
local_files_only=True. A predição subsequente usa apenas arrays e ficheiros
locais. Para reproduzir um snapshot remoto exato, passa
revision="<Hub commit SHA>"; os IDs de commit da versão estão em
RELEASE.md. O jogo de terminal usa sempre pesos locais/em cache e falha
com um comando de download quando estes faltam.
A cache partilhada do Hugging Face guarda os ficheiros de modelo como ligações
simbólicas. Na versão de macOS testada, o Core ML pode copiar essas ligações para o
seu modelo compilado temporário e perder o ficheiro de pesos. O carregador
materializa automaticamente apenas o pacote Core ML como ficheiros regulares em
~/.cache/laya-coreml/packages/, verifica o seu hash de conteúdo e reutiliza essa
cópia. Define LAYA_COREML_CACHE para alterar esta raiz de cache. Isto usa espaço em
disco extra, não downloads de modelo extra. Um diretório criado com
hf download --local-dir já contém ficheiros regulares e não precisa de cópia.
O carregador reconhece o formato do pacote e seleciona as suas unidades de cálculo
predefinidas. Substitui usando compute_units="cpu_gpu", "cpu_ne", "cpu" ou
"all" para uma experiência explícita. cpu_ne permite trabalho na CPU e trabalho
no ANE; não garante que todas as operações sejam executadas no ANE. Escolhê-lo para
a exportação SDPA normal não transforma essa exportação no grafo ANE dedicado.
CLI
Guarda o dicionário de perguntas em questions.json e depois executa:
laya-coreml predict ./models/ane --offline \
--state 'The customer requests a refund.' --questions questions.json
laya-coreml predict aceita um diretório local ou um ID do Hub, um --revision
opcional e --compute-units. --offline impede o acesso ao Hub.
Converter a partir do código-fonte
Para o caminho Core ML normal:
pip install 'laya-coreml[convert]'
laya-coreml convert laya-multilingual models/custom-multilingual
O exportador de investigação do ANE vive no checkout Git, fora do wheel de inferência:
git clone https://github.com/mizorewww/laya-coreml
cd laya-coreml
pip install -e '.[convert,dev,research]'
python -m experiments.ane_engineering.probe --source laya-multilingual \
--kind body --length 96 --output models/ane96
Vê resultados da conversão, engenharia do ANE e controlos e gravação do Snake para os fluxos de trabalho correspondentes.