Instructions to use open-thoughts/OpenThinker2-32B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use open-thoughts/OpenThinker2-32B with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="open-thoughts/OpenThinker2-32B") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("open-thoughts/OpenThinker2-32B") model = AutoModelForCausalLM.from_pretrained("open-thoughts/OpenThinker2-32B") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Inference
- Notebooks
- Google Colab
- Kaggle
- Local Apps
- vLLM
How to use open-thoughts/OpenThinker2-32B with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "open-thoughts/OpenThinker2-32B" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "open-thoughts/OpenThinker2-32B", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/open-thoughts/OpenThinker2-32B
- SGLang
How to use open-thoughts/OpenThinker2-32B with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "open-thoughts/OpenThinker2-32B" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "open-thoughts/OpenThinker2-32B", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "open-thoughts/OpenThinker2-32B" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "open-thoughts/OpenThinker2-32B", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use open-thoughts/OpenThinker2-32B with Docker Model Runner:
docker model run hf.co/open-thoughts/OpenThinker2-32B
Is the training set of OpenThinker2-32B sampled from the 1M dataset?
The model card said "This model is a fine-tuned version of Qwen/Qwen2.5-32B-Instruct on the OpenThoughts2-1M dataset."
"We used 128 4xA100 nodes to train the model for 50 hours."
total_train_batch_size: 512
num_epochs: 5.0
The trainer_log.jsonl shows total_steps": 3475
It seems that the training set of OpenThinker2-32B has 3475512/5=355840 examples. It is a small subset of the OpenThoughts2-1M dataset.
347554s (per step) /3600 ≈ 52 hours
If it is not wrong, I wonder how did you sample this subset?
We trained with the full dataset.
For these training runs, we used example packing, so one step does not necessarily correspond to one row on the dataset. With example packing, it’s possible that one step can contain multiple rows.
Thanks very much for your help.
open-r1 previously reported "Sample packing hurts performance for reasoning".
https://huggingface.co/blog/open-r1/update-3
I wonder did you use some special packing methods?
We use the packing implemented in Llama Factory. I believe the way this works is it doesn’t cut off any sequences unlike the diagram in the OpenR1 blog post. It only combines shorter sequences together.
