Model reference · open weights
UserLM-2.0 is an open-weight language model from microsoft. UserLM-2.0 (FP32) weighs 16.1 GB; the smallest configuration that runs it is 2× RTX 3060 12 GB.
For self-hosting, compare this build's requirements below with the GPU you plan to rent.
Summary of the microsoft/UserLM-2.0 model card, 2026-10-31
What it is
| Released by | microsoft |
|---|---|
| Released | 2026-10-01 |
| Parameters | 8.0B |
| VRAM | 16.1 GB for the weights |
What it runs on
| Card | Requests at once | Context max | Memory | |
|---|---|---|---|---|
| 8K each | 32K each | |||
| RTX 3060 12 GB … RTX 4060 Ti 16 GB 2 smaller cards | ||||
| RTX 3090 24 GB | 6 | 1 | 49K | 23.4 GB |
| RTX 4090 24 GB | 6 | 1 | 48K | 23.4 GB |
| RTX 5090 32 GB | 13 | 3 | 105K | 31.0 GB |
| L40S 48 GB | 25 | 6 | all 128K | 44.0 GB |
| A100 80 GB | 57 | 14 | all 128K | 78.2 GB |
| H100 80 GB | 53 | 13 | all 128K | 78.1 GB |
| RTX PRO 6000 Blackwell 96 GB | 67 | 16 | all 128K | 93.8 GB |
| DGX Spark (GB10) 128 GB unified | 80 | 20 | all 128K | 107 GB |
| H200 141 GB | 109 | 27 | all 128K | 138 GB |
| B200 180 GB | 143 | 35 | all 128K | 176 GB |
| 2× RTX 3060 12 GB tensor parallel | 5 | 1 | 42K | 11.6 GB a card |
| 2× RTX 4060 Ti 16 GB tensor parallel | 12 | 3 | 98K | 15.4 GB a card |
| 2× RTX 4090 24 GB tensor parallel | 27 | 6 | all 128K | 23.4 GB a card |
| 2× RTX 3090 24 GB tensor parallel | 27 | 6 | all 128K | 23.4 GB a card |
| Requests at once | 8K tokens each | 32K tokens each |
|---|---|---|
| 1 | 17.9 GB | 21.1 GB |
| 5 | 22.2 GB | 38.3 GB |
| 8 | 25.4 GB | 51.2 GB |
| 16 | 34.0 GB | 85.5 GB |
| 32 | 51.2 GB | 154 GB |
| 64 | 85.5 GB | 292 GB |
One card, with vLLM's small-card settings.
From the model card
UserLM-2.0 is an 8-billion-parameter user simulator for user-AI conversations. Unlike typical language models trained to play the assistant, UserLM-2.0 generates the user side of a conversation. It is conditioned on a task intent that describes the user's high-level objective.
UserLM-2.0 can:
The model is intended to support research on realistic user simulation and the development and evaluation of more robust assistant models.
Paper: The accompanying UserLM-2.0 paper is forthcoming. An arXiv link will be added when it becomes available.
meta-llama/Llama-3.1-8B-Instructmicrosoft/UserLM-2.0UserLM-2.0 generates user turns. Put the task intent in the system message, generate a user turn, append the assistant's reply, and call the model again. The bundled chat template automatically opens the correct user-role generation header.
The following example uses Hugging Face Transformers directly:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "microsoft/UserLM-2.0"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
dtype=torch.bfloat16,
device_map="auto",
).eval()
task_intent = (
"You want help planning a quick vegetarian dinner for four people. "
"You have 45 minutes, one guest has a peanut allergy, and you need a "
"shopping list and cooking instructions. You prefer pasta, but only "
"mention that preference if the assistant asks. Your goal is not "
"satisfied until you receive a menu, shopping list, and cooking steps."
)
messages = [{"role": "system", "content": task_intent}]
def generate_user_turn(messages: list[dict[str, str]]) -> str:
inputs = tokenizer.apply_chat_template(
messages,
tokenize=True,
add_generation_prompt=True,
return_tensors="pt",
return_dict=True,
).to(model.get_input_embeddings().weight.device)
with torch.inference_mode():
outputs = model.generate(
**inputs,
max_new_tokens=128,
do_sample=True,
temperature=1.0,
top_p=0.8,
eos_token_id=tokenizer.eos_token_id,
pad_token_id=tokenizer.pad_token_id,
)
generated_ids = outputs[0, inputs["input_ids"].shape[1]:]
return tokenizer.decode(generated_ids, skip_special_tokens=True).strip()
# First user turn
user_turn = generate_user_turn(messages)
messages.append({"role": "user", "content": user_turn})
print("User:", user_turn)
# Supply an assistant response, then generate the next user turn.
messages.append(
{
"role": "assistant",
"content": "I can help with that. Would you prefer pasta, tacos, or a rice bowl?",
}
)
user_turn = generate_user_turn(messages)
if "" not in user_turn:
messages.append({"role": "user", "content": user_turn})
print("User:", user_turn)
else:
print("The simulated user ended the conversation.")
The following user turns were produced by UserLM-2.0 with
temperature=1.0 and top_p=0.8. Assistant turns were supplied by the
simulation harness.
UserLM-2.0: hi. i need help with a dinner. i have 45 minutes. i need to make a dinner for 4 people. 1 of the people has a peanut allergy. i need a menu, shopping list, and step by step cooking instructions. if you need any more information from me, let me know.
Assistant: I can help with that. Would you prefer pasta, tacos, or a rice bowl?
UserLM-2.0: pasta.
Assistant: Let's make chickpea tomato pasta with a green salad. For four people, buy 12 oz pasta, two cans of chickpeas, one 28 oz can of crushed tomatoes, garlic, one onion, olive oil, Italian herbs, one lemon, mixed greens, one cucumber, and Parmesan or a vegetarian alternative. The menu is peanut-free, but check package labels for cross-contamination. Would you like the step-by-step cooking order?
UserLM-2.0: yes please.
Assistant: Boil the pasta while you prepare a chickpea tomato sauce. Toss the greens and cucumber with lemon and olive oil, combine the pasta and sauce, and serve with the salad and optional cheese. This should take about 35 minutes.
UserLM-2.0: ``
Treat `` as a control signal: stop the rollout rather than showing it as dialogue in an end-user interface. Generated text is stochastic, so outputs will vary across runs.
UserLM-2.0 is released for researchers evaluating assistant language models. It can simulate multi-turn conversations to help estimate how an assistant may perform with real users. Our evaluation provides evidence that UserLM-2.0 produces more realistic and task-faithful user behavior than prior user simulators and prompted assistant models.
Potential research applications that were not implemented in the accompanying work include:
UserLM-2.0 is not an assistant model. It is unlikely to be useful to an end user who needs direct help completing a task; an
Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.