mizorewww

Laya-CoreML

Les poids de Laya convertis en Core ML, exécutables sur le Neural Engine d'Apple, sans PyTorch, Transformers ni MLX pour l'inférence. Un port indépendant, pas une publication officielle de Convai ni d'Apple.

Vérifié le 2026-10-05

Laya Core ML joue à Snake avec de vraies probabilités de modèle locales

La version 0.2.0 synchronise les correctifs applicables de prompt et de résultat via l’amont 4aa6761 (version source 0.3.23). Les runtimes Core ML et ANE acceptent tous deux des libellés d’affichage noul personnalisés ({"false": "no", "true": "yes"}), valident les questions avec des erreurs propres à chaque question et préservent les instructions structurées Unicode. Les longues listes de conversation conservent leurs tokens les plus récents ; les chaînes et les objets conservent leur début. usage signale la troncature d’état et, le cas échéant, les options réduites. answer_confidence est la probabilité de réponse la plus élevée ; la sémantique existante de confidence reste inchangée. Aucun des deux champs n’établit la précision de calibration. Le plafonnement de température du checkpoint documenté ci-dessous est inclus dans cette version. Les limites de capacité des graphes exportés continuent de lever des erreurs plutôt que de tronquer silencieusement.

La maintenance suit les correctifs amont de Laya applicables à ces runtimes. Les nouvelles fonctionnalités de runtime et les propositions d’optimisation propres à un backend nécessitent une implémentation et une validation alignées sur l’amont ; fermer un ticket n’établit pas que le comportement signalé est corrigé.

Décisions typées à poids ouverts sur Apple Silicon. Core ML, Neural Engine, zéro jeton généré.

PyPI · Poids Hugging Face · 中文

Un vrai modèle Laya joue à Snake en local, avec des probabilités visibles, le score, la longueur, la latence et les interventions de sécurité. Le GIF rejoue une exécution Core ML enregistrée à vitesse d’origine (1×). Le jeu utilise des caractéristiques explicites de planificateur et une couche de sécurité de cycle visible.

La boucle Snake active complète a soutenu 49.1–50.0 décisions/s sur trois épisodes de 600 pas sans plafond, avec zéro mort et deux interventions de sécurité. Les temps de la boucle de jeu et les limites de cadence incluent la sérialisation du rendu ; le dessin dans le terminal est exclu.

Une courte décision multilingue : 4.98 ms P50 / 5.31 ms P95 sur M3 Max avec ANE FP16. La même expérience a mesuré une énergie système totale par décision 2.78× meilleure que MLX FP16 compilé. Une variante à palette W8 validée séparément atteint 4.88 ms et une amélioration énergétique de 3.19×. Ce sont des résultats à une seule question, pas des temps par image Snake complets ; l’amélioration de 10× demandée n’a pas été atteinte.

Lancer la démo

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

Télécharge une fois, puis joue hors ligne. PyTorch, Transformers ou MLX ne sont pas nécessaires pour l’inférence. Le terminal nécessite 104 colonnes × 35 lignes. Espace met en pause ; ↑/↓ change la vitesse ; R réinitialise ; Q quitte. La première initialisation Core ML peut prendre des dizaines de secondes.

Contrôles, enregistrement et export vidéo · Débits de décision stables mesurés · Vidéo partageable et provenance de l’enregistrement

Demander une décision

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"])

Laya renvoie des probabilités pour les questions choice, score ordinales et noul booléennes. Il n’y a pas de décodage autorégressif ni de JSON généré à analyser. Les modèles du Hub se téléchargent avant l’initialisation ; les prédictions suivantes restent locales. Passe local_files_only=True pour exiger un cache existant, ou charge un répertoire local.

À la suite de la v0.3.5 en amont, les températures de calibration ajustées sont bornées à [0.5, 5.0] avant utilisation : le bucket livré choice:11+ vaut 0.1006, ce qui aiguiserait les logits d’environ 10x et rapporterait un pile ou face comme une quasi-certitude. Les valeurs brutes du checkpoint restent disponibles via agent.temperature_raw et agent.temperature_by_options_raw, et un RuntimeWarning nomme chaque bucket borné au chargement.

Le bundle ANE a une limite totale de 96 tokens, y compris la question, les options et l’état. Les requêtes plus longues lèvent une erreur de capacité. Utilise aac6fef/laya-multilingual-coreml pour le modèle généraliste à 1024 tokens. API complète, sélection de modèle et usage hors ligne.

Mesuré sur M3 Max

GPU 40 cœurs, 128 GiB, macOS 27.2. Une question de 91 tokens complétée à 96, incluant la préparation du prompt, la tokenisation, les tableaux, l’inférence synchrone, la calibration et le formatage. Le chargement et l’échauffement sont exclus. MLX active compile, le cache de préfixes et les buckets de forme. Six blocs alternés de 20 secondes par implémentation ont produit 65,598 appels stables.

Métrique MLX FP16 compilé 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
Estimation de puissance système moyenne 61.39 W 30.75 W 27.39 W
Énergie système / décision 0.4288 J 0.1540 J 0.1344 J
Gain de vitesse 1× 1.39× 1.42×
Gain d’énergie système 1× 2.78× 3.19×

L’énergie utilise des relevés directs du capteur SMC PSTR, avec des échantillons bruts et un rejet explicite des anomalies. C’est une estimation entachée d’incertitude liée au capteur et à la charge de fond. Gain de vitesse × rapport de puissance moyenne = gain d’énergie ; multiplier à nouveau l’énergie par la vitesse compterait le temps deux fois. La variante W8 compresse les poids tout en conservant le calcul FP16. Elle est approximative, et sa réduction de taille de paquet n’est pas un rapport de vitesse.

Preuves de vitesse, d’énergie et de matériel · Mesures brutes.

Checkpoints disponibles

Bundle Hugging Face Moteur par défaut Capacité Usage
Laya 421M CPU + GPU 512 tokens Modèle anglais d’origine
Multilingual 322M CPU + GPU 1024 tokens Décisions multilingues générales
Typed Decisions 421M CPU + GPU 1024 tokens Checkpoint spécialisé d’origine
Snake GPU CPU + GPU B3 / L64 Met en lot les trois questions de jeu compactes
Multilingual ANE CPU + ANE B1 / L96 Décisions courtes, FP16
Multilingual ANE W8 CPU + ANE B1 / L96 Compression de palette approximative en option

Chaque bundle inclut le tokenizer et la configuration, la fiche modèle, la provenance, les sommes de contrôle et la validation au moment du packaging. Les bundles ANE incluent aussi les tenseurs exacts d’embedding hôte et d’action d’origine dont ils ont besoin. Aucun checkout d’entraînement d’origine n’est requis.

Fidélité du portage et limites

Les trois checkpoints FP16 généralistes correspondent aux réponses sélectionnées en amont sur 189/189 questions de validation. Chacun passe 100 appels répétés. Le ANE FP16 L96 passe 59/59 questions de fitting, avec une dérive maximale de probabilité calibrée de 0.002925 ; le W8 passe le même sous-ensemble avec une dérive de 0.014393 sous un seuil inchangé de 0.02. Les expériences à six et quatre bits ont échoué à ce seuil et ne sont pas des poids publiés. Ce sont des fixtures de fidélité de conversion, pas une preuve d’exactitude générale sur les tâches.

Un graphe FP16 ANE L1024 exporté séparément passe la fixture complète 63/63, mais une vraie requête de 1024 tokens prend environ 91.7 ms dans son écran série. Le résultat ANE court n’établit pas d’avantage sur le contexte long. Un contrôle Snake apparié de 600 pas correspond à 600/600 actions, avec zéro mort et zéro intervention de bouclier ; les trois appels séquentiels de l’adaptateur ANE actuel n’établissent pas d’accélération cohérente sur toute la partie par rapport à MLX compilé.

L’export Core ML SDPA ordinaire et le graphe ANE sont des implémentations différentes. L’export ordinaire est par défaut sur CPU+GPU après l’échec des formes GPU RangeDim sans restriction aux contrôles de fidélité locaux. Changer seul son réglage d’appareil ne reproduit pas le résultat ANE. La réécriture ANE utilise des activations BC1L, des projections 1×1 et une attention par tête ; son plan et une trace Instruments séparée étayent le travail du Neural Engine. Le CPU gère encore les frontières d’entrée/sortie.

Documentation et reproductibilité

Pour exporter toi-même, installe laya-coreml[convert] et lance laya-coreml convert laya-multilingual models/custom. Les scripts de conversion, de compression et de benchmark de la recherche ANE se trouvent dans le checkout Git. La wheel d’inférence contient le runtime portable et la démo terminal en option.

Apache-2.0. Portage indépendant de Laya, par Convai Innovations et des contributeurs, construit sur le projet frère MLX. Ce n’est pas une version officielle de Convai Innovations ni d’Apple. Voir NOTICE.