Section courante

A propos

Section administrative du site

Les premiers pas

OLMo est un dépôt pour l'entraînement et l'utilisation des modèles de langage ouverts de pointe d'AI2. Conçu par des scientifiques, pour des scientifiques.

Installation

Installez d'abord PyTorch en suivant les instructions spécifiques à votre système d'exploitation.

Pour l'entraînement et le réglage fin, nous recommandons l'installation depuis les sources :

git clone https://github.com/allenai/OLMo.git
cd OLMo
pip install -e .[all]

Vous pouvez également installer depuis PyPI avec :

pip install ai2-olmo

Pré-entraînement

Le pré-entraînement OLMo suit une procédure d'entraînement en deux étapes. Dans un premier temps, nous nous entraînons sur de grandes quantités de données, principalement issues du web : OLMo-mix-1124. Dans un deuxième temps, nous nous entraînons sur une plus petite quantité de données ciblées et de haute qualité : Dolmino-mix-1124.

Vous trouverez tous les points de contrôle, au minimum toutes les 1 000 étapes d'entraînement, dans le noyau OLMo et au format Hugging Face :

Variante OLMo Format (Stage 1) OLMo Format (Stage 2) Hugging Face Format
OLMo-2 1B OLMo-2 1B OLMo-2 1B Hugging Face pour la variante 1B
OLMo-2 7B OLMo-2 7B OLMo-2 7B Hugging Face pour la variante 7B
OLMo-2 13B OLMo-2 13B OLMo-2 13B Hugging Face pour la variante 13B
OLMo-2 32B OLMo-2 32B OLMo-2 32B Hugging Face pour la variante 32B

Remarque : La variante 32B a été entraînée sur notre nouveau simulateur. Pour entraîner ou affiner OLMo-2 32B, rendez-vous sur OLMo-core.

Étapes de reproduction

Pour reproduire l'un des processus d'entraînement décrits ci-dessous, exécutez :

torchrun --nproc_per_node=8 scripts/train.py {path_to_train_config}

Pour la configuration d'entraînement, utilisez l'une des configurations listées ci-dessous.

Si vous souhaitez remplacer certains paramètres de la configuration d'entraînement sans avoir à écrire une nouvelle configuration à chaque fois, procédez comme suit :

torchrun --nproc_per_node=8 scripts/train.py {path_to_train_config} \
  --setting1=value \
  --setting2=value \
  --setting3.subsetting1=value

Les configurations d'entraînement ci-dessous concernent les données d'entraînement diffusées en direct via HTTP. Pour une reproduction à grande échelle, nous vous recommandons de télécharger les fichiers localement et de modifier les chemins d'accès pour qu'ils pointent vers votre système de fichiers local.

Pour une exécution sur des appareils Mac :

python scripts/train.py {path_to_train_config}

Exemple :

python scripts/train.py configs/tiny/OLMo-20M.yaml --save_overwrite

Remarque : Vous devez mettre à jour PyTorch vers la version 2.5.x pour l'exécuter.

Étape 1

L'étape 1 est la plus importante. Nous nous entraînons sur des jetons de 4 T ou 5 T, principalement basés sur des données Web.

  OLMo2 1B OLMo2 7B OLMo2 13B
Nombre de jetons 4 000 milliards 4 000 milliards 5 000 milliards
Point de contrôle stage1-step1907359-tokens4001B stage1-step928646-tokens3896B stage1-step596057-tokens5001B
Configuration d'entraînement OLMo2-1B-stage1.yaml OLMo2-7B-stage1.yaml OLMo2-13B-stage1.yaml
WandB wandb.ai/OLMo2-1B wandb.ai/OLMo2-7B wandb.ai/OLMo2-13B

Vous trouverez ici les fichiers .csv.gz contenant les données d'entraînement.

Étape 2 pour le 1B

Pour le modèle 1B, nous avons formé trois fois avec un ordre de données différent sur 50B jetons de haute qualité, en utilisant le dernier point de contrôle de la graine 42 comme point de contrôle final.

  Point de contrôle Configuration d'entraînement WandB
graine aléatoire 42049 stage2-ingredient1-step23852-tokens50B OLMo2-1B-stage2-seed42069.yaml wandb.ai/OLMo2-1B
graine aléatoire 666 stage2-ingredient2-step23852-tokens50B OLMo2-1B-stage2-seed666.yaml wandb.ai/OLMo2-1B
graine aléatoire 42 (main) stage2-ingredient3-step23852-tokens50B OLMo2-1B-stage2-seed42.yaml wandb.ai/OLMo2-1B

Étape 2 pour le modèle 7B

Pour le modèle 7B, nous effectuons trois entraînements avec un ordre de données différent sur 50 B jetons de haute qualité, puis nous calculons la moyenne des modèles.

  Point de contrôle Configuration d'entraînement WandB
graine aléatoire 42 stage2-ingredient1-step11931-tokens50B OLMo2-7B-stage2-seed42.yaml wandb.ai/OLMo2-7B
graine aléatoire 42069 stage2-ingredient2-step11931-tokens50B OLMo2-7B-stage2-seed42069.yaml wandb.ai/OLMo2-7B
graine aléatoire 666 stage2-ingredient3-step11931-tokens50B OLMo2-7B-stage2-seed666.yaml wandb.ai/OLMo2-7B
modèle final gonflé main pas de configuration, ils ont juste fait la moyenne des poids en Python  

Les configurations d'entraînement liées ici sont configurées pour télécharger le dernier point de contrôle après l'étape 1 et démarrer l'entraînement à partir de là.

Étape 2 pour le modèle 13B

Pour le modèle 13B, ils effectuent trois entraînements avec un ordre de données différent sur 100 B de jetons de haute qualité, puis une fois de plus sur 300 B de jetons de haute qualité. Ils calculons ensuite la moyenne des modèles.

  Point de contrôle Configuration d'entraînement WandB
graine aléatoire 1110, 100B stage2-ingredient1-step11931-tokens100B OLMo2-13B-stage2-seed1110-100B.yaml wandb.ai/OLMo2-13B
graine aléatoire 2662, 100B stage2-ingredient2-step11931-tokens100B OLMo2-13B-stage2-seed2662-100B.yaml wandb.ai/OLMo2-13B
graine aléatoire 6209, 100B stage2-ingredient3-step11931-tokens100B OLMo2-13B-stage2-seed6209-100B.yaml wandb.ai/OLMo2-13B
graine aléatoire 2662, 300B stage2-ingredient4-step11931-tokens300B OLMo2-13B-stage2-seed2662-300B.yaml wandb.ai/OLMo2-13B
modèle final gonflé main pas de configuration, ils ont juste fait la moyenne des poids en Python  

Les configurations d'entraînement liées ici permettent de télécharger les derniers points de contrôle après l'étape 1 et de démarrer l'entraînement à partir de là.

Remarque : Vous trouverez toutes les informations sur le 32B dans le dépôt OLMo-core.

Variantes optimisées pour les instructions

Pour les variantes optimisées pour les instructions de ces modèles, consultez :

Inférence

Vous pouvez utiliser notre intégration Hugging Face pour exécuter une inférence sur les points de contrôle des Transformers OLMo :

  1. from transformers import AutoModelForCausalLM, AutoTokenizer
  2. olmo = AutoModelForCausalLM.from_pretrained("allenai/OLMo-2-0425-1B")
  3. tokenizer = AutoTokenizer.from_pretrained("allenai/OLMo-2-0425-1B")
  4. message = ["La modélisation du langage est "]
  5. inputs = tokenizer(message, return_tensors='pt', return_token_type_ids=False)
  6. # vérification facultative de cuda
  7. # inputs = {k: v.to('cuda') for k,v in inputs.items()}
  8. # olmo = olmo.to('cuda')
  9. response = olmo.generate(**inputs, max_new_tokens=100, do_sample=True, top_k=50, top_p=0.95)
  10. print(tokenizer.batch_decode(response, skip_special_tokens=True)[0])

Alternativement, avec l'abstraction du pipeline Hugging Face :

  1. from transformers import pipeline
  2. olmo_pipe = pipeline("text-generation", model="allenai/OLMo-2-0425-1B")
  3. print(olmo_pipe("La modélisation du langage est"))

Quantification

  1. olmo = AutoModelForCausalLM.from_pretrained("allenai/OLMo-2-0425-1B", torch_dtype=torch.float16, load_in_8bit=True)  # nécessite bitsandbytes

Le modèle quantifié est sensible aux types d'entrée et à la gestion CUDA. Pour éviter tout problème potentiel, nous recommandons de convertir explicitement les identifiants d'entrée en CUDA à l'aide de : inputs.input_ids.to('cuda')

Évaluation

Des outils supplémentaires pour l'évaluation des modèles OLMo sont disponibles dans les dépôts OLMo Eval et olmes.

Hébergement Modal.com

Un exemple de script est fourni pour héberger un modèle OLMo 2 sur Modal.com à l'aide de l'API OpenAI dans ./scripts/olmo2_modal_openai.py. Pour l'exécuter :

modal deploy ./scripts/olmo2_modal_openai.py

Vous pouvez vérifier votre point de terminaison à l'aide de curl de la manière suivante :

curl -X POST \
  -H "Authorization: Bearer [the secret token from above]" \
  -H "Content-Type: application/json" \
  -d @body.json \
  https://[the web endpoint modal creates above]/v1/chat/completions

où body.json est de la forme :

  1. {
  2.     "model": "OLMo-2-1124-13B-Instruct",
  3.     "messages": [
  4.         {
  5.             "role": "user",
  6.             "content": "Who was Alan Turing?"
  7.         }
  8.       ],
  9.     "max_tokens": 100,
  10.     "temperature": 0.9,
  11.     "stream": true
  12. }

Citer :

  1. @misc{olmo20242olmo2furious,
  2.       title={2 OLMo 2 Furious}, 
  3.       author={Team OLMo and Pete Walsh and Luca Soldaini and Dirk Groeneveld and Kyle Lo and Shane Arora and Akshita Bhagia and Yuling Gu and Shengyi Huang and Matt Jordan and Nathan Lambert and Dustin Schwenk and Oyvind Tafjord and Taira Anderson and David Atkinson and Faeze Brahman and Christopher Clark and Pradeep Dasigi and Nouha Dziri and Michal Guerquin and Hamish Ivison and Pang Wei Koh and Jiacheng Liu and Saumya Malik and William Merrill and Lester James V. Miranda and Jacob Morrison and Tyler Murray and Crystal Nam and Valentina Pyatkin and Aman Rangapur and Michael Schmitz and Sam Skjonsberg and David Wadden and Christopher Wilhelm and Michael Wilson and Luke Zettlemoyer and Ali Farhadi and Noah A. Smith and Hannaneh Hajishirzi},
  4.       year={2024},
  5.       eprint={2501.00656},
  6.       archivePrefix={arXiv},
  7.       primaryClass={cs.CL},
  8.       url={https://arxiv.org/abs/2501.00656},
  9. }     


Dernière mise à jour : Vendredi, le 6 juin 2025