mizorewww

Laya-CoreML

Os pesos do Laya convertidos para Core ML, capazes de correr no Neural Engine da Apple, sem PyTorch, Transformers ou MLX na inferência. Um port independente, não um lançamento oficial da Convai nem da Apple.

Verificado em 2026-10-05

O Laya Core ML a jogar Snake com probabilidades reais do modelo local

A versão 0.2.0 sincroniza as correções aplicáveis de prompt e de resultado através do upstream 4aa6761 (versão de origem 0.3.23). Tanto os runtimes Core ML como os ANE aceitam etiquetas de apresentação noul personalizadas ({"false": "no", "true": "yes"}), validam as perguntas com erros específicos de cada pergunta e preservam instruções estruturadas em Unicode. As listas de conversa longas mantêm os tokens mais recentes; as cadeias de caracteres e os objetos mantêm o início. O usage reporta o truncamento do estado e, quando existem, as opções colapsadas. O answer_confidence é a probabilidade mais alta da resposta; a semântica existente de confidence mantém-se inalterada. Nenhum dos campos estabelece exatidão de calibração. O clamp de temperatura do checkpoint documentado abaixo está incluído nesta versão. Os limites de capacidade dos grafos exportados continuam a gerar erros em vez de cortarem silenciosamente.

A manutenção segue as correções do Laya upstream aplicáveis a estes runtimes. Funcionalidades novas do runtime e propostas de otimização específicas de um backend exigem uma implementação e uma validação alinhadas com o upstream; fechar uma issue não estabelece que o comportamento reportado ficou corrigido.

Decisões tipadas com pesos abertos em Apple Silicon. Core ML, Neural Engine, zero tokens gerados.

PyPI · Pesos no Hugging Face · Chinês

Um modelo Laya real joga Snake localmente, com probabilidades, pontuação, comprimento, latência e intervenções de segurança visíveis. O GIF reproduz uma execução Core ML gravada a velocidade 1×. O jogo usa características explícitas do planeador e uma camada de segurança de ciclo visível.

O ciclo ativo completo do Snake sustentou 49.1–50.0 decisões/s ao longo de três episódios sem limite de 600 passos, com zero mortes e duas intervenções de segurança. Tempos do ciclo de jogo e limites de ritmo fixo incluem a serialização da renderização; a pintura do terminal está excluída.

Uma decisão multilingue curta: 4.98 ms P50 / 5.31 ms P95 num M3 Max com ANE FP16. A mesma experiência mediu energia total do sistema por decisão 2.78× melhor do que o MLX FP16 compilado. Uma variante de paleta W8, validada em separado, alcançou 4.88 ms e uma melhoria de energia de 3.19×. Estes resultados são de uma única pergunta, não tempos de fotograma completos do Snake; a melhoria de 10× pedida não foi alcançada.

Executar a demonstração

Apple Silicon · macOS 15+ · Python 3.11–3.13.

pip install 'laya-coreml[demo]'
hf download aac6fef/laya-multilingual-coreml-ane --local-dir models/snake
laya-coreml-snake --model ./models/snake

Descarrega uma vez e joga depois offline. Não é preciso PyTorch, Transformers nem MLX para a inferência. O terminal precisa de 104 colunas × 35 linhas. A barra de espaços pausa; ↑/↓ muda a velocidade; R reinicia; Q sai. A inicialização do Core ML na primeira utilização pode demorar dezenas de segundos.

Controlos, gravação e exportação de vídeo · Taxas de decisão estáveis medidas · Proveniência do vídeo e da gravação partilháveis

Pedir uma decisão

pip install laya-coreml
import laya_coreml as laya

agent = laya.load("aac6fef/laya-multilingual-coreml-ane")
result = agent.predict(
    "The customer requests a refund of a duplicate payment.",
    {
        "refund": {
            "type": "noul",
            "instructions": "Does the customer request a refund?",
        }
    },
)
print(result["answers"]["refund"])

O Laya devolve probabilidades para perguntas choice, score ordinais e noul booleanas. Não há descodificação autorregressiva nem JSON gerado para analisar. Os modelos do Hub são descarregados antes da inicialização; as predições seguintes ficam locais. Passa local_files_only=True para exigir uma cache existente, ou carrega um diretório local.

Seguindo o upstream v0.3.5, as temperaturas de calibração ajustadas são limitadas (clamp) a [0.5, 5.0] antes de serem usadas: o bucket choice:11+ distribuído é 0.1006, o que aguçaria os logits ~10x e reportaria um lançamento de moeda como quase certeza. Os valores em bruto do checkpoint continuam disponíveis como agent.temperature_raw e agent.temperature_by_options_raw, e um RuntimeWarning nomeia cada bucket limitado no carregamento.

O pacote ANE tem um limite total de 96 tokens, incluindo a pergunta, as opções e o estado. Pedidos mais longos geram um erro de capacidade. Usa aac6fef/laya-multilingual-coreml para o modelo de uso geral de 1024 tokens. API completa, seleção de modelo e utilização offline.

Medido num M3 Max

GPU de 40 núcleos, 128 GiB, macOS 27.2. Uma pergunta de 91 tokens preenchida até 96, incluindo a preparação do prompt, a tokenização, os arrays, a inferência síncrona, a calibração e a formatação. O carregamento e o aquecimento estão excluídos. O MLX ativa a compilação, a cache de prefixos e os buckets de forma. Seis blocos alternados de 20 segundos por implementação produziram 65,598 chamadas estáveis.

Métrica MLX FP16 compilado Core ML ANE FP16 Core ML ANE W8
P50 / P95 6.94 / 7.39 ms 4.98 / 5.31 ms 4.88 / 5.23 ms
Estimativa da potência média do sistema 61.39 W 30.75 W 27.39 W
Energia do sistema / decisão 0.4288 J 0.1540 J 0.1344 J
Ganho de velocidade 1× 1.39× 1.42×
Ganho de energia do sistema 1× 2.78× 3.19×

A energia usa leituras diretas do sensor SMC PSTR, com amostras em bruto e rejeição explícita de anomalias. É uma estimativa com incerteza do sensor e da carga em segundo plano. Ganho de velocidade × rácio de potência média = ganho de energia; multiplicar novamente a energia pela velocidade contaria o tempo duas vezes. A variante W8 comprime os pesos mantendo o cálculo em FP16. É aproximada, e a sua redução do tamanho do pacote não é um rácio de velocidade.

Provas de velocidade, energia e hardware · Medições em bruto.

Checkpoints disponíveis

Pacote do Hugging Face Motor predefinido Capacidade Finalidade
Laya 421M CPU + GPU 512 tokens Modelo inglês original
Multilingue 322M CPU + GPU 1024 tokens Decisões multilingues de uso geral
Decisões Tipadas 421M CPU + GPU 1024 tokens Checkpoint especializado original
Snake GPU CPU + GPU B3 / L64 Agrupa as três perguntas compactas do jogo
Multilingue ANE CPU + ANE B1 / L96 Decisões curtas, FP16
Multilingue ANE W8 CPU + ANE B1 / L96 Compressão de paleta aproximada opcional

Todos os pacotes incluem tokenizer/configuração, cartão de modelo, proveniência, somas de verificação e validação no momento do empacotamento. Os pacotes ANE incluem ainda os tensores exatos de embedding/ação do anfitrião de que precisam. Não é preciso um checkout original de treino.

Fidelidade da portagem e limites

Os três checkpoints FP16 de uso geral coincidem com as respostas selecionadas do upstream em 189/189 perguntas de validação. Cada um passa 100 chamadas repetidas. O ANE FP16 L96 passa 59/59 perguntas compatíveis, com um desvio máximo de probabilidade calibrada de 0.002925; o W8 passa o mesmo subconjunto com um desvio de 0.014393 sob um gate inalterado de 0.02. As experiências de seis e quatro bits falharam esse gate e não são pesos publicados. Estes são fixtures de fidelidade de conversão, não uma prova de exatidão geral na tarefa.

Um grafo FP16 ANE L1024 exportado em separado passa o fixture completo de 63/63, mas um pedido real de 1024 tokens demora cerca de 91.7 ms no seu ecrã serial. O resultado curto do ANE não estabelece uma vantagem de contexto longo. Uma verificação pareada de Snake de 600 passos coincide em 600/600 ações, com zero mortes e zero intervenções do escudo; as três chamadas sequenciais do adaptador ANE atual não estabelecem uma aceleração consistente do jogo completo face ao MLX compilado.

A exportação Core ML SDPA normal e o grafo ANE são implementações diferentes. A exportação normal usa CPU+GPU por predefinição depois de as formas GPU RangeDim irrestritas falharem as verificações locais de fidelidade. Alterar apenas a definição do dispositivo não reproduz o resultado ANE. A reescrita ANE usa ativações BC1L, projeções 1×1 e atenção por cabeça; o seu plano e um traço Instruments separado sustentam trabalho no Neural Engine. A CPU continua a tratar das fronteiras de entrada/saída.

Documentação e reprodutibilidade

Para exportares tu mesmo, instala laya-coreml[convert] e executa laya-coreml convert laya-multilingual models/custom. Os scripts de conversão, compressão e benchmark da investigação ANE vivem no checkout Git. O wheel de inferência contém o runtime portátil e a demonstração de terminal opcional.

Apache-2.0. Portagem independente do Laya, pela Convai Innovations e colaboradores, construída sobre o projeto irmão MLX. Não é uma versão oficial da Convai Innovations nem da Apple. Vê o NOTICE.