Upstage 'Solar open2' release. performance on par with DeepSeek V4 Flash.

Reddit r/LocalLLaMA Models

Summary

Upstage released Solar Open 2, a 250B-parameter open-weight MoE model with hybrid attention, delivering performance comparable to DeepSeek V4 Flash while being efficient for agentic workflows.

No content available
Original Article
View Cached Full Text

Cached at: 07/22/26, 10:20 AM

upstage/Solar-Open2-250B · Hugging Face

Source: https://huggingface.co/upstage/Solar-Open2-250B Solar Open 2

https://huggingface.co/upstage/Solar-Open2-250B#solar-open-2Solar Open 2

Solar Open 2 is Upstage’s 250B-A15B open-weight large language model, built for agentic use cases such as office productivity, document-intensive work, and coding. Its Hybrid-Attention Mixture-of-Experts (MoE) architecture with linear attention delivers highly efficient inference even in long-context settings.

Technical Report|Blog|Upstage Website|Try Demo (~7/31)

https://huggingface.co/upstage/Solar-Open2-250B#highlightsHighlights

Highlights_enHighlights_kr

  • **Agentic Specialist:**Purpose-built for agentic workflows — tool calling, multi-step reasoning, and end-to-end task execution. Competitive with the strongest open-weight models on agent benchmarks.
  • **Minimal Inference Cost:**A 250B-parameter MoE that activates only 15B per token, built on a hybrid attention stack that interleaves three linear-attention layers with one softmax-attention layer — large-model capacity at small-model inference cost.
  • **1M-Token Context:**The linear-attention layers encode token order intrinsically in their recurrent state, so positional encoding is removed entirely (NoPE), lifting the RoPE extrapolation limit. Only 12 of the 48 layers keep a KV cache, holding long-context memory to roughly a quarter of an all-softmax model of the same shape.
  • **Efficiently Trained at Low Cost:**Initialized by selective weight transfer from Solar Open 1 (102B) — only the 2.3% of weights that survive the architectural change are carried over, and everything else is randomly initialized — which raises the starting point and accelerates early convergence at 250B scale.
  • **Multilingual:**English, Korean, and Japanese.

https://huggingface.co/upstage/Solar-Open2-250B#model-overviewModel Overview

FieldValueModel NameSolar Open 2 (250B-A15B)ArchitectureHybrid-Attention Mixture-of-Experts (MoE)Total Parameters250B (250,287,794,944)Active Parameters15B (per token)Layers48Hidden Size4096AttentionHybrid — Softmax + Linear Attention, pattern\[Softmax, Linear×3\] × 12Position EncodingNoPE (no rotary positional encoding)Number of Attention Heads (GQA)(Softmax) 64 query / 8 KV, (Linear) 64 queryNumber of Experts321 (320 routed + 1 shared)Number of Activated Experts8 routed (top-8) + 1 sharedVocabulary196,608Context Length1MPre-training Tokens~12 TrillionSupported LanguagesEnglish, Korean, JapaneseTraining HardwareNVIDIA B200 GPUsTraining GPU Time2M GPU HoursLicenseUpstage Solar License (seeLICENSE)Hardware RequirementsMinimum: H200 * 4ea / Recommended: H200 * 8ea


https://huggingface.co/upstage/Solar-Open2-250B#performancePerformance

https://huggingface.co/upstage/Solar-Open2-250B#english-benchmarksEnglish Benchmarks

BenchmarkSolar Open 2 250B-A15BSolar Open 100B 102B-A12BCommand A+ 218B-A25BMistral Medium 3.5 128B dense, highMiMo-V2.5 310B-A15BDeepSeek-V4-Flash 284B-A13B, maxKnow. & ReasoningMMLU-Pro86.280.479.081.284.685.9GPQA-Diamond86.366.275.677.583.088.9HLE (w/o tools)28.811.511.412.824.332.3LiveCodeBench (v6)92.456.586.184.989.192.3ArtifactsBench55.943.442.849.859.361.0HMMT260293.968.973.562.961.494.7AIME202695.787.796.089.092.397.0****IF / LongMulti-Challenge61.040.545.849.839.062.0IFBench80.057.773.969.067.180.3AA-LCR62.336.046.061.062.763.7****AgentSWE-Bench Verified70.415.414.469.673.073.8Terminal Bench Hard28.32.325.033.341.734.1APEX-Agents16.62.41.66.113.413.2MCP-Atlas58.234.427.230.763.958.2τ³ (banking)19.67.45.85.88.722.3GDPval-AA v2 (ELO)1128–71292911451187

https://huggingface.co/upstage/Solar-Open2-250B#korean-benchmarksKorean Benchmarks

BenchmarkSolar Open 2 250B-A15BSolar Open 100B 102B-A12BMiMo-V2.5 310B-A15BDeepSeek-V4-Flash 284B-A13B, maxClaude Haiku 4.5 closedGPT-5.4 mini closedKMMLU-Pro78.464.069.178.967.978.1CLIcK90.778.978.489.253.589.6HAE-RAE v1.173.873.361.773.138.569.4Ko-AIME’25†97.780.088.098.081.790.7HRM8K92.287.690.793.490.691.3KBank-MMLU†80.865.571.079.568.979.0KBL75.565.569.872.869.975.3KorMedMCQA93.084.487.794.187.094.2Ko-GDPval†86.83.481.085.068.359.4 † in-house benchmarks.


https://huggingface.co/upstage/Solar-Open2-250B#quickstartQuickstart

The examples below assume 8 GPUs with at least 141 GB of memory each, such as NVIDIA H200 or B200 GPUs. Actual memory requirements depend on the context length and serving settings.

https://huggingface.co/upstage/Solar-Open2-250B#transformersTransformers

Use theUpstage Transformers branch with native Solar Open 2 supportfor local experimentation. For production serving, we recommend vLLM.

Install the dependencies:

Install a CUDA-enabled PyTorch build for your platform before running this command.fla\-coreenables the optimized KDA kernels; without it, Transformers uses a substantially slower PyTorch fallback.

python -m pip install -U \
  "git+https://github.com/upstageAI/[email protected]" \
  "fla-core[cuda]>=0.5.1" \
  accelerate einops

Run the model:

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

model_id = "upstage/Solar-Open2-250B"

tokenizer = AutoTokenizer.from_pretrained(
    model_id,
    trust_remote_code=False,
)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    device_map="auto",
    dtype=torch.bfloat16,
    trust_remote_code=False,
)
model.eval()

messages = [
    {"role": "user", "content": "What is Upstage?"},
]
prompt = tokenizer.apply_chat_template(
    messages,
    tokenize=False,
    add_generation_prompt=True,
    reasoning_effort="high",
    think_render_option="preserved",
)
input_device = model.get_input_embeddings().weight.device
model_inputs = tokenizer(prompt, return_tensors="pt").to(input_device)

generated_ids = model.generate(
    **model_inputs,
    max_new_tokens=32768,
    do_sample=True,
    temperature=1.0,
    top_p=1.0,
)

new_token_ids = generated_ids[0, model_inputs.input_ids.shape[-1] :].tolist()
think_end_id = tokenizer.convert_tokens_to_ids("<|think:end|>")

if think_end_id in new_token_ids:
    # Split immediately after the final <|think:end|> token.
    answer_start = len(new_token_ids) - new_token_ids[::-1].index(think_end_id)
else:
    # No end marker usually means generation stopped while the model was reasoning.
    answer_start = len(new_token_ids)

reasoning = tokenizer.decode(
    new_token_ids[:answer_start],
    skip_special_tokens=True,
).strip()
answer = tokenizer.decode(
    new_token_ids[answer_start:],
    skip_special_tokens=True,
).strip()

print("[reasoning]", reasoning)
print("[answer]", answer)

If the answer is empty, generation likely reachedmax\_new\_tokensbefore the reasoning block ended. Increasemax\_new\_tokensand try again.

https://huggingface.co/upstage/Solar-Open2-250B#serving-with-vllm-recommendedServing with vLLM (Recommended)

https://huggingface.co/upstage/Solar-Open2-250B#option-1-dockerOption 1: Docker

The image below is based on vLLM v0.22.0 and CUDA 12.9.

docker run --rm --gpus all --ipc=host \
  -p 8000:8000 \
  -v "${HF_HOME:-$HOME/.cache/huggingface}:/root/.cache/huggingface" \
  upstage/vllm-solar-open2 \
  upstage/Solar-Open2-250B \
  --served-model-name solar-open2-250b \
  --tensor-parallel-size 8 \
  --enable-expert-parallel \
  --moe-backend triton \
  --default-chat-template-kwargs '{"think_render_option":"preserved"}' \
  --reasoning-parser solar_open2 \
  --tool-call-parser solar_open2 \
  --enable-auto-tool-choice \
  --logits-processors vllm.v1.sample.logits_processor.solar_open2:SolarOpen2TemplateLogitsProcessor

https://huggingface.co/upstage/Solar-Open2-250B#option-2-install-from-sourceOption 2: Install from source

Install theUpstage forkwhile reusing the matching vLLM v0.22.0 CUDA 12.9 wheel:

pip install -U uv

VLLM_PRECOMPILED_WHEEL_LOCATION="https://github.com/vllm-project/vllm/releases/download/v0.22.0/vllm-0.22.0%2Bcu129-cp38-abi3-manylinux_2_28_x86_64.whl" \
VLLM_USE_PRECOMPILED=1 \
uv pip install --reinstall-package vllm --torch-backend=cu129 \
  "git+https://github.com/UpstageAI/[email protected]"

Start the server:

vllm serve upstage/Solar-Open2-250B \
  --served-model-name solar-open2-250b \
  --tensor-parallel-size 8 \
  --enable-expert-parallel \
  --moe-backend triton \
  --default-chat-template-kwargs '{"think_render_option":"preserved"}' \
  --reasoning-parser solar_open2 \
  --tool-call-parser solar_open2 \
  --enable-auto-tool-choice \
  --logits-processors vllm.v1.sample.logits_processor.solar_open2:SolarOpen2TemplateLogitsProcessor

Send a chat completion request:

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "solar-open2-250b",
    "messages": [
      {"role": "user", "content": "What is Upstage?"}
    ],
    "max_tokens": 131584,
    "temperature": 1.0,
    "top_p": 1.0,
    "reasoning_effort": "high"
  }'

https://huggingface.co/upstage/Solar-Open2-250B#quantized-versionsQuantized Versions

Official quantized models byNotaAIare available for deployment on smaller GPU configurations:


https://huggingface.co/upstage/Solar-Open2-250B#capabilitiesCapabilities

https://huggingface.co/upstage/Solar-Open2-250B#reasoningReasoning

Usereasoning\_effort="high"for reasoning andreasoning\_effort="none"for a direct response. The recommended vLLM configuration limits a reasoning block to 131,072 tokens.

EffortBehaviornoneDirect responsehighReasoning, capped at 131,072 tokens max\_tokenslimits the complete response, including reasoning and the final answer, so leave room beyond the reasoning cap.

from openai import OpenAI

client = OpenAI(api_key="EMPTY", base_url="http://localhost:8000/v1")

response = client.chat.completions.create(
    model="solar-open2-250b",
    messages=[
        {
            "role": "user",
            "content": "Prove that the square root of 2 is irrational.",
        },
    ],
    reasoning_effort="high",
    temperature=1.0,
    top_p=1.0,
    max_tokens=131584,
)

# The reasoning trace is returned separately from the final answer.
print(response.choices[0].message.reasoning)
print(response.choices[0].message.content)

https://huggingface.co/upstage/Solar-Open2-250B#tool-callingTool Calling

Tool calls follow the standard OpenAI function-calling interface. Start the server with\-\-tool\-call\-parser solar\_open2and\-\-enable\-auto\-tool\-choice.

from openai import OpenAI

client = OpenAI(api_key="EMPTY", base_url="http://localhost:8000/v1")

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Get current weather for a location",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {"type": "string"},
                },
                "required": ["location"],
            },
        },
    },
]

response = client.chat.completions.create(
    model="solar-open2-250b",
    messages=[
        {
            "role": "user",
            "content": "What's the weather in Seoul?",
        },
    ],
    tools=tools,
)

print(response.choices[0].message.tool_calls)

https://huggingface.co/upstage/Solar-Open2-250B#agentic-useAgentic Use

Both Anthropic’s Claude Code and Nous Research’s Hermes Agent can run on Solar Open 2 served locally with vLLM (see the vLLM deployment guide). A single vLLM server exposes both interfaces: Claude Code connects through the Anthropic-compatible /v1/messages endpoint and Hermes Agent through the OpenAI-compatible /v1 endpoint (model id solar-open2-250b), each needing only a few environment variables or one provider entry — no setup script required. Tools exposed over the Model Context Protocol (MCP) reach the model through the same tool-calling interface, and both agents support MCP natively.

https://huggingface.co/upstage/Solar-Open2-250B#claude-codeClaude Code

vLLM exposes an Anthropic-compatible /v1/messages endpoint, so Claude Code connects directly — no proxy needed:

export ANTHROPIC_BASE_URL=http://localhost:8000
export ANTHROPIC_AUTH_TOKEN=dummy   # any non-empty value
export ANTHROPIC_MODEL=solar-open2-250b
export ANTHROPIC_SMALL_FAST_MODEL=solar-open2-250b
claude

The model name must match the server’s --served-model-name (solar-open2-250b).

Prerequisites: the Claude Code CLI installed and a running vLLM server.

https://huggingface.co/upstage/Solar-Open2-250B#hermes-agentHermes Agent

Register the local vLLM server as a custom OpenAI-compatible provider in ~/.hermes/config.yaml:

model:
  provider: custom
  default: solar-open2-250b
  base_url: http://localhost:8000/v1
  api_key: dummy

https://huggingface.co/upstage/Solar-Open2-250B#best-practicesBest Practices

Recommendedclient-side generation settings(the values a client / API caller should send)

Solar Open 2 is a reasoning-capable model. Usereasoning\_effort="high"for complex or agentic tasks. The recommended vLLM configuration preserves the reasoning trace.

ParameterRecommendedNotesreasoning\_effort``highRecommended for complex reasoning and agentic taskstemperature1.0top\_p1.0max\_tokensup to 256KCovers reasoning + output budget Recommended settings by reasoning mode

Modetemperaturetop_pmax_tokensreasoning\_effort="none"1.01.0up to 128Kreasoning\_effort="high"1.01.0up to 256K

  • Setmax\_tokenshigh enough (up to 256K) — reasoning traces can be long and may otherwise truncate the answer.
  • The reasoning trace is preserved by default (think\_render\_option=preserved).
  • Multi-turn: Keep prior reasoning traces in the conversation history. The defaultthink\_render\_option=preservedhandles this automatically — do not strip reasoning from previous turns when constructing follow-up requests.
  • **Parsing:**the OpenAI-compatible server returns reasoning in a separatemessage\.reasoningfield with localtransformers, split the raw output on the reasoning markers yourself.

https://huggingface.co/upstage/Solar-Open2-250B#licenseLicense

Solar Open 2 is distributed under theUpstage Solar License.

Key requirements for Derivative AI Models(create / train / fine-tune / distill / improve using Solar Open 2):

  • **Naming:**prefix your model name with “Solar” (e.g.,Solar\-MyModel\-v1).
  • **Attribution:**prominently display “Built with Solar” in related public-facing materials.
  • **Notice:**include a copy of the Upstage Solar License with your derivative model.

https://huggingface.co/upstage/Solar-Open2-250B#citationCitation

@misc{solar-open-2-2026,
    title={Solar Open 2 Technical Report},
    author={Upstage AI},
    year={2026},
    url={https://huggingface.co/upstage/Solar-Open2-250B}
}

Similar Articles

deepseek-ai/DeepSeek-V4-Pro-DSpark

Hugging Face Models Trending

DeepSeek releases preview versions of its V4 series, including DeepSeek-V4-Pro (1.6T parameters, 49B activated) and DeepSeek-V4-Flash (284B parameters, 13B activated), both supporting a one-million-token context and featuring hybrid attention, manifold-constrained hyper-connections, and a Muon optimizer.

nota-ai/Solar-Open2-250B-Nota-NVFP4

Hugging Face Models Trending

Nota AI releases a 4-bit quantized version of Upstage's Solar Open2 250B MoE model, using proprietary NVFP4 quantization that requires NVIDIA Blackwell GPUs.

deepseek-ai/DeepSeek-V4-Flash

Hugging Face Models Trending

DeepSeek releases DeepSeek-V4-Flash and DeepSeek-V4-Pro, new MoE language models supporting 1 million token contexts with improved efficiency and performance.

deepseek-ai/DeepSeek-V4-Flash-DSpark

Hugging Face Models Trending

DeepSeek releases V4 series of Mixture-of-Experts language models (Pro 1.6T/49B activated, Flash 284B/13B activated) supporting one-million-token context with hybrid attention and speculative decoding, claiming best open-source model performance.