Auteur: Davide Santangelo www.davidesantangelo.com
Le paysage de l'intelligence artificielle (IA) est de plus en plus dominé par les modèles de grande langue (LLM), des systèmes puissants capables de comprendre et de générer du texte humain. Alors que Python a traditionnellement été le langage dominant dans la sphère d'apprentissage automatique (ML) [1], la polyvalence et la nature centrée sur les développeurs de Ruby, en particulier dans le cadre Ruby on Rails [3], soulèvent des possibilités intrigantes. Peut-on entraîner son propre LLM en utilisant Ruby? Ce rapport fournit une plongée profonde de niveau d'experts dans le processus, explorant les étapes nécessaires, les capacités et les limites de l'écosystème Ruby, et les considérations pratiques impliquées dans l'entreprise d'un tel projet.
Ruby, réputé pour sa syntaxe élégante et se concentre sur le bonheur des développeurs [3], a sculpté un créneau solide dans le développement Web, alimentant les principales plateformes comme Shopify, Github et Airbnb [3]. Ruby on Rails, son cadre phare, met l'accent sur la «convention sur la configuration», permettant un développement rapide et un prototypage, ce qui le rend idéal pour les startups et la construction de produits minimaux viables (MVP) [1]. Le cadre offre des capacités backend robustes, la gestion de la logique métier, des bases de données (comme PostgreSQL, MySQL et SQLite améliorée dans Rails 8), l'authentification des utilisateurs et les interactions frontales de plus en plus sophistiquées via des outils comme Hotwire [1].
Cependant, le domaine de la ML, en particulier la tâche intensive en calcul de la formation des LLMS, présente différents défis. La domination de Python découle de son riche écosystème de bibliothèques matures et hautement optimisées comme Tensorflow, Pytorch et Scikit-Learn [1]. Alors que Ruby possède des forces dans le traitement de texte et l'intégration Web [5], son écosystème ML natif est moins étendu. Les bibliothèques existent, mais s'appuient souvent sur des liaisons aux bibliothèques C / C ++ sous-jacentes ou nécessitent une intégration avec des outils Python [2].
Cette dépendance à l'égard des bibliothèques externes ou des stratégies d'intégration constitue un thème central lorsque l'on considère la formation LLM avec Ruby. Bien que le rubis pur puisse convenir aux modèles éducatifs N-gram [10] ou des tâches plus petites, la construction d'un LLM de pointe nécessite de tirer parti des outils qui comblent l'écart vers des environnements informatiques hautes performances, provenant souvent des écosystèmes C ++ ou Python. Cela introduit des complexités liées aux dépendances et aux frais généraux potentiels de performance par rapport à une approche purement basée sur Python, mais débloque également des capacités importantes autrement indisponibles dans Ruby seul.
Ce rapport naviguera dans le cycle de vie de la formation LLM, examinant chaque phase à travers l'objectif d'un développeur Ruby, mettant en évidence les outils disponibles, les barrages routiers potentiels et les stratégies pragmatiques.
Avant de se lancer dans la formation LLM, l'établissement d'un environnement de développement robuste et la compréhension des bibliothèques Ruby de base disponibles pour le calcul numérique et l'apprentissage automatique est crucial.
Bien qu'il ne soit pas aussi expansif que celui de Python, l'écosystème ML de Ruby propose plusieurs joyaux clés:
ajouter!au lieu deajouter_) [18]. Des joyaux connexes comme TorchVision, TorchText et Torchaudio étendent ses capacités [17].Ruby-openaiest un wrapper direct pour l'API OpenAI [9].| Bibliothèque | Fonction primaire | Caractéristiques / notes clés | Python équivalent (conceptuel) | Extraits |
|---|---|---|---|---|
| Numo :: narray | Calcul numérique | Arrays N dimensionnels, opérations mathématiques, base pour d'autres bibliothèques | Nombant | [8] |
| Rume | Apprentissage automatique | L'interface de type Scikit-Learn, divers algorithmes (SVM, arbres, clustering, MLP), utilise Numo :: Narray, v1.0.0 en 2025 | Scikit-apprend | [8] |
| Torch.rb | Apprentissage en profondeur | Liaisons à libtorch (backend pytorch c ++), support GPU (via libtorch), modules nn autograd, nn | Pytorch | [8] |
| Tensorflow-Rouby | Apprentissage en profondeur | Liaisons à l'API Tensorflow C, support GPU (via TF), exécution impatiente, construction de graphiques, autograd | Tensorflow | [8] |
| Gemmes PNL | Traitement du langage naturel | Tokenisation, entièrement des services publics de traitement de texte (segmenter pragmatique, rubis-tige, etc.) | NLTK, spacy, tokenizers HF | [7], [28] |
| Gemmes de l'interface LLM | Interagir avec les LLM / API pré-formées | Rubyllm, Langchain.rb, BoxCars, Ruby-openai. Construire des applications à l'aide de LLMS. | Langchain (Python), Openai SDK | [8] |
| Pycall | Interopérabilité python | Appelez Python Code / Libraries directement à partir de Ruby | (Bibliothèque de ponts) | [8], [34] |
| Transformers-Ruby | Utilisation de modèles de transformateur | API de pipeline de type transformateurs de face étreintes, construit sur Torch.rb, pour les modèles pré-construits d'inférence / réglage fin | Transformeurs de face étreintes | [35] |
Étant donné la domination de Python, l'interaction avec les bibliothèques Python de Ruby est souvent nécessaire.
Pycall.init[33]. Notez que Pycall peut ne pas soutenir officiellement une utilisation multi-thread en raison de complexités avec la gestion du verrouillage mondial de Python (GIL) [38].),système, ouOpen3module [42].Open3` fournit plus de contrôle sur STDIN, STDOUT et STDERR [42]. L'échange de données se produit généralement via la sortie standard (nécessitant l'analyse de Ruby, utilisant souvent des formats comme JSON) ou des fichiers temporaires [46]. Ceci est plus simple pour les tâches ponctuelles mais moins efficaces pour une interaction fréquente.Le choix de la bonne méthode d'intégration dépend de la fréquence d'interaction, de la complexité de l'échange de données et des exigences de performance. Pour une intégration profonde nécessaire pendant la formation (par exemple, l'accès à des fonctions de bibliothèque spécifiques à plusieurs reprises), Pycall pourrait être nécessaire malgré ses complexités. Pour déployer un modèle formé ou orchestrer des étapes de pipeline distinctes, des API ou des files d'attente de messages offrent souvent un meilleur découplage et évolutivité [2].
Il est important de définir des attentes réalistes. Alors que les gemmes comme Torch.rb et Tensorflow-Ruby offrent des capacités puissantes, ce sont essentiellement des emballages dans des bibliothèques externes complexes. Cela s...
[Courte citation de 8% de l'article original]