mizorewww

Laya-CoreML

Os pesos do Laya convertidos para Core ML, capazes de rodar 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

Laya Core ML jogando Snake com probabilidades reais do modelo local

A versão 0.2.0 sincroniza as correções aplicáveis de prompt e de resultado por meio do upstream 4aa6761 (versão de origem 0.3.23). Os runtimes Core ML e ANE aceitam rótulos de exibição noul personalizados ({"false": "no", "true": "yes"}), validam perguntas com erros específicos de cada pergunta e preservam instruções estruturadas em Unicode. Listas longas de conversa retêm seus tokens mais recentes; strings e objetos retêm seu início. usage relata o truncamento de estado e, quando presente, as opções recolhidas. answer_confidence é a maior probabilidade de resposta; a semântica existente de confidence permanece inalterada. Nenhum dos campos estabelece precisão de calibração. O limite de temperatura do checkpoint documentado abaixo está incluído nesta versão. Os limites de capacidade dos grafos exportados ainda geram erro em vez de cortar silenciosamente.

A manutenção acompanha as correções do upstream Laya aplicáveis a esses runtimes. Novos recursos de runtime e propostas de otimização específicas de backend exigem uma implementação alinhada ao upstream e uma validação; fechar uma issue não estabelece que o comportamento relatado foi corrigido.

Decisões tipadas de 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 de 1×. O jogo usa recursos explícitos de planejador e uma camada de segurança de ciclo visível.

O laço ativo completo do Snake sustentou 49.1–50.0 decisões/s em três episódios de 600 passos sem limite, com zero mortes e duas intervenções de segurança. Os tempos do laço de jogo e os limites de taxa cadenciada incluem a serialização de renderização; a pintura do terminal fica de fora.

Uma decisão multilíngue curta: 4.98 ms de P50 / 5.31 ms de P95 no M3 Max com ANE FP16. O mesmo experimento mediu energia de sistema inteiro por decisão 2.78× melhor do que o MLX FP16 compilado. Uma variante de paleta W8 validada separadamente alcançou 4.88 ms e 3.19× de melhoria de energia. Esses são resultados de uma única pergunta, não tempos completos de quadro do Snake; a melhoria de 10× solicitada não foi alcançada.

Execute 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

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

Controles, gravação e exportação de vídeo · Taxas de decisão estáveis medidas · Vídeo compartilhável e proveniência da gravação

Peça 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 retorna probabilidades para perguntas choice, score ordinais e noul booleanas. Não há decodificação autorregressiva nem JSON gerado para analisar. Os modelos do Hub baixam antes da inicialização; as predições seguintes permanecem locais. Passe local_files_only=True para exigir um cache existente, ou carregue um diretório local.

Seguindo o upstream v0.3.5, as temperaturas de calibração ajustadas são limitadas a [0.5, 5.0] antes do uso: o bucket choice:11+ fornecido é 0.1006, o que aguçaria os logits em ~10x e relataria um cara ou coroa como quase certeza. Os valores brutos 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 pergunta, opções e estado. Requisições mais longas geram um erro de capacidade. Use aac6fef/laya-multilingual-coreml para o modelo de propósito geral de 1024 tokens. API completa, seleção de modelo e uso offline.

Medido no M3 Max

GPU de 40 núcleos, 128 GiB, macOS 27.2. Uma pergunta de 91 tokens preenchida até 96, incluindo preparação do prompt, tokenização, arrays, inferência síncrona, calibração e formatação. O carregamento e a fase de aquecimento ficam de fora. O MLX habilita compile, cache de prefixo e 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 de 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 brutas e rejeição explícita de anomalias. É uma estimativa com incerteza de sensor e de carga de fundo. Ganho de velocidade × razão de potência média = ganho de energia; multiplicar a energia pela velocidade de novo contaria o tempo duas vezes. A variante W8 comprime os pesos mantendo a computação em FP16. Ela é aproximada, e sua redução de tamanho de pacote não é uma razão de velocidade.

Velocidade, energia e evidência de hardware · Medições brutas.

Checkpoints disponíveis

Pacote Hugging Face Engine padrão Capacidade Finalidade
Laya 421M CPU + GPU 512 tokens Modelo inglês original
Multilingual 322M CPU + GPU 1024 tokens Decisões multilíngues gerais
Typed Decisions 421M CPU + GPU 1024 tokens Checkpoint especializado original
Snake GPU CPU + GPU B3 / L64 Faz batching das três perguntas compactas do jogo
Multilingual ANE CPU + ANE B1 / L96 Decisões curtas, FP16
Multilingual ANE W8 CPU + ANE B1 / L96 Compressão de paleta aproximada opcional

Cada pacote inclui tokenizer/configuração, model card, proveniência, checksums e validação no momento do empacotamento. Os pacotes ANE também incluem os tensores exatos de embedding/ação do host de que precisam. Não é necessário nenhum checkout de treinamento original.

Fidelidade da portabilidade e limites

Os três checkpoints FP16 de propósito geral correspondem às respostas selecionadas do upstream em 189/189 perguntas de validação. Cada um passa em 100 chamadas repetidas. O ANE FP16 L96 passa em 59/59 perguntas de ajuste, com desvio máximo de probabilidade calibrada de 0.002925; o W8 passa no mesmo subconjunto com desvio de 0.014393 sob um limiar inalterado de 0.02. Os experimentos de seis e quatro bits falharam nesse limiar e não são pesos publicados. Esses são fixtures de fidelidade de conversão, não prova de acurácia geral de tarefa.

Um grafo FP16 ANE L1024 exportado separadamente passa na fixture completa de 63/63, mas uma requisição real de 1024 tokens leva cerca de 91.7 ms em sua triagem serial. O resultado curto do ANE não estabelece uma vantagem de contexto longo. Uma verificação pareada de Snake de 600 passos corresponde a 600/600 ações, com zero mortes e zero intervenções de escudo; as três chamadas sequenciais do adapter ANE atual não estabelecem uma aceleração consistente de jogo completo em relação ao MLX compilado.

A exportação Core ML comum com SDPA e o grafo ANE são implementações diferentes. A exportação comum usa CPU+GPU por padrão depois que formas RangeDim de GPU irrestritas falharam nos testes locais de fidelidade. Mudar apenas sua configuração de dispositivo não reproduz o resultado do ANE. A reescrita ANE usa ativações BC1L, projeções 1×1 e atenção por cabeça; seu plano e um trace separado do Instruments sustentam o trabalho do Neural Engine. A CPU ainda cuida das fronteiras de entrada/saída.

Documentação e reprodutibilidade

Para exportar por conta própria, instale laya-coreml[convert] e execute laya-coreml convert laya-multilingual models/custom. Os scripts de conversão, compressão e benchmark da pesquisa do ANE ficam no checkout do Git. A wheel de inferência contém o runtime portátil e a demonstração de terminal opcional.

Apache-2.0. Porte independente do Laya, feito pela Convai Innovations e colaboradores, construído sobre o projeto irmão MLX. Não é um lançamento oficial da Convai Innovations nem da Apple. Consulte NOTICE.