可调节推理预算,字节Seed团队开源大型语言模型 Seed-OSS 系列!

简介: 字节跳动 Seed 团队正式发布了 Seed-OSS 系列开源大型语言模型,提供强大的长上下文、推理、代理和通用功能,以及对开发者友好的多功能特性。

字节跳动 Seed 团队正式发布了 Seed-OSS 系列开源大型语言模型,提供强大的长上下文、推理、代理和通用功能,以及对开发者友好的多功能特性。

 

模型合集:

https://modelscope.cn/collections/Seed-OSS-93213ae8624640

项目地址:

https://github.com/ByteDance-Seed/seed-oss

01.模型介绍

Seed-OSS 系列开源的三个模型均以 Apache-2.0 许可证发布,允许研究人员和企业开发者自由使用、修改和再分发,具有以下亮点:

  • 灵活的推理预算控制:允许用户根据需要灵活调整推理长度,这种对推理长度的动态控制能力,可在实际应用场景中提升推理效率;
  • 增强推理能力:在保持平衡且优秀的通用能力的同时,针对推理任务进行了特别优化;
  • 智能体能力:在涉及工具使用和问题解决等智能体任务中表现突出;
  • 研究友好:考虑到在预训练中加入合成指令数据可能会影响后续研究,字节同时发布了含有与不含指令数据的预训练模型,为研究社区提供了更多样化的选择;
  • 原生长上下文:在训练中原生支持最长 512K 的上下文窗口。

 

模型评测

Seed-OSS 系列尽管只用了12T token进行训练,依然在多个主流开源基准测试中表现出色,基准测试结果显示,Seed-OSS-36B 位列当前强性能的开源大模型之列。

Seed-OSS-36B-Base

含合成数据版本的 Base 模型在 MMLU-Pro 上取得 65.1 得分,在 MATH 上取得 81.7 得分。非合成基础版本虽然在许多方面略微落后,但也具有竞争力。

 

image.gif 编辑

Seed-OSS-36B-Instruct

Instruct 版本在多个领域都取得了 SOTA 成绩

  • 数学与推理:Seed-OSS-36B-Instruct 在 AIME24 上取得 91.7% 的成绩,在 BeyondAIME 上取得 65,均代表开源领域的最新 SOTA 水平。
  • 代码能力:在 LiveCodeBench v6 上,Instruct 模型得分 67.4,同样刷新 SOTA 纪录。
  • 长上下文处理:在 RULER(128K 上下文长度)测试中,该模型达到 94.6,创下开源模型的最高分。

 

image.gif 编辑

 

思考预算

用户可以灵活指定模型的推理预算。下图展示了在不同任务中,随着推理预算变化而产生的性能曲线。对于较简单的任务(如 IFEval),模型的思维链较短,随着推理预算的增加,分数会出现一定波动。而在更具挑战性的任务(如 AIME 和 LiveCodeBench)中,模型的思维链较长,分数则会随着推理预算的增加而提升。

 

image.gif 编辑

模型在运行过程,会提醒用户 token 使用情况:

<seed:think>
Got it, let's try to solve this problem step by step. The problem says ... ...
<seed:cot_budget_reflect>I have used 129 tokens, and there are 383 tokens remaining for use.</seed:cot_budget_reflect>
Using the power rule, ... ...
<seed:cot_budget_reflect>I have used 258 tokens, and there are 254 tokens remaining for use.</seed:cot_budget_reflect>
Alternatively, remember that ... ...
<seed:cot_budget_reflect>I have used 393 tokens, and there are 119 tokens remaining for use.</seed:cot_budget_reflect>
Because if ... ...
<seed:cot_budget_reflect>I have exhausted my token budget, and now I will start answering the question.</seed:cot_budget_reflect>
</seed:think>
To solve the problem, we start by using the properties of logarithms to simplify the given equations: (full answer omitted).

image.gif

如果未设置推理预算(默认模式),Seed-OSS 将以无限长度启动推理。如果指定了推理预算,官方建议用户优先选择 512 的整数倍数(如 512、1K、2K、4K、8K 或 16K),因为模型已在这些区间上进行了大量训练。当推理预算为 0 时,模型会被指示直接输出答案;对于低于 512 的预算,官方也建议统一设为 0。

02.模型推理

安装环境

pip install git+ssh://git@github.com/Fazziekey/transformers.git@seed-oss

image.gif

推理代码

from modelscope import AutoModelForCausalLM, AutoTokenizer
import os
import re
model_name_or_path = "ByteDance-Seed/Seed-OSS-36B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path)
model = AutoModelForCausalLM.from_pretrained(model_name_or_path, device_map="auto")  # You may want to use bfloat16 and/or move to GPU here
messages = [
    {"role": "user", "content": "How to make pasta?"},
]
tokenized_chat = tokenizer.apply_chat_template(
  messages, 
  tokenize=True, 
  add_generation_prompt=True, 
  return_tensors="pt", 
  thinking_budget=512 # control the thinking budget
)
outputs = model.generate(tokenized_chat.to(model.device), max_new_tokens=2048)
output_text = tokenizer.decode(outputs[0])

image.gif

03.模型微调

魔搭官方微调框架SWIFT已经支持了Seed-oss系列模型的推理和微调。首先需要安装main分支的SWIFT框架:

pip install git+https://github.com/modelscope/ms-swift.git

image.gif

接下来,按照模型介绍我们需要安装特殊版本的transformers:

pip install git+https://github.com/Fazziekey/transformers.git@seed-oss

image.gif

安装完成后,我们先看下使用SWIFT进行推理的流程

THINKING_BUDGET=0 \
swift infer \
  --model ByteDance-Seed/Seed-OSS-36B-Instruct \
  --infer_backend pt

image.gif

来问个问题:

<<< 计算y=x在0-1区间内的定积分
The current thinking budget is 0, so I will directly start answering the question.</seed:cot_budget_reflect>
</seed:think>要计算函数\(y=x\)在区间\([0,1]\)上的定积分,步骤如下:
### **步骤1:确定原函数**  
根据积分基本公式,\(\int x^n dx = \frac{x^{n+1}}{n+1} + C\)(\(n\neq-1\))。对于\(y=x\)(即\(x^1\)),其原函数为:  
\[F(x) = \frac{x^2}{2} + C\]
### **步骤2:应用牛顿-莱布尼茨公式**  
定积分\(\int_a^b f(x)dx = F(b) - F(a)\),代入\(a=0\),\(b=1\):  
\[
\int_0^1 x dx = F(1) - F(0) = \left(\frac{1^2}{2} + C\right) - \left(\frac{0^2}{2} + C\right) = \frac{1}{2} - 0 = \frac{1}{2}
\]
### **几何意义验证**  
\(y=x\)在\([0,1]\)上的图像是直角三角形,底和高均为1,面积为\(\frac{1}{2}\times1\times1=\frac{1}{2}\),与积分结果一致。
**答案:\(\boxed{\frac{1}{2}}\)**

image.gif

上面是在没有thinking_budget的条件下的推理,接下来我们试一下有thinking_budget下的推理:

THINKING_BUDGET=1024 \
swift infer \
  --model ByteDance-Seed/Seed-OSS-36B-Instruct \
  --infer_backend pt

image.gif

<<< 计算y=x在0-1区间内的定积分
<seed:think>
用户现在需要计算y=x在0到1区间的定积分,首先我得回忆一下定积分的定义或者几何意义吧。首先,定积分的几何意义的话,y=x是一条直线,过原点和(1,1),那在0到1之间,它和x轴围成的图形应该是一个三角形吧?对,因为x从0到1,y从0到x,所以这个区域是一个直角三角形,直角边的长度都是1,因为当x=1时y=1,所以两条直角边分别是x轴上从0到1,y轴上从0到1,那三角形面积就是(底×高)/2,这里底和高都是1,所以面积就是1/2,那定积分的结果应该就是1/2?不过可能用户需要用定义或者牛顿-莱布尼茨公式来算,不能只靠几何意义吧?
<seed:cot_budget_reflect>I have used 261 tokens, and there are 763 tokens remaining for use.</seed:cot_budget_reflect>
先想想牛顿-莱布尼茨公式,这个公式说如果F(x)是f(x)的原函数,那么定积分从a到b就是F(b)-F(a)。这里f(x)=x,它的原函数是什么呢?x的原函数应该是(1/2)x²,因为导数(1/2)x²的导数是x,对吧?那F(1)=(1/2)(1)²=1/2,F(0)=(1/2)(0)²=0,所以F(1)-F(0)=1/2-0=1/2,这样就得到结果了。
那如果用定义算的话,定积分是积分和的极限,把区间[0,1]分成n个小区间,每个小区间的长度Δx=(1-0)/n=1/n,取每个小区间的右端点ξi=i/n(i=1,2,...,n),那积分和就是Σf(ξi)Δx=Σ(i/n)(1/n)=Σi/n²,而Σi从1到n是n(n+1)/2,所以积分和就是[n(n+1)/2]/n²=(n+1)/(2n),当n→∞时,极限是(1+1/n)/2→1/2,这样也得到1/2。
<seed:cot_budget_reflect>I have used 560 tokens, and there are 464 tokens remaining for use.</seed:cot_budget_reflect>
或者用黎曼积分的定义,不管怎么分区间,只要分割越来越细,积分和都趋向1/2,所以结果就是1/2。应该没问题吧?主要就是这几种方法,几何意义最直观,牛顿-莱布尼茨最方便,定义法虽然麻烦但能理解本质。用户可能是刚开始学定积分,所以可能需要把这几种方法都提一下?不过问题只是计算,可能直接用牛顿-莱布尼茨最快,但最好还是确认一下原函数对不对,(1/2)x²的导数确实是x,没错,所以F(1)-F(0)=1/2,正确。几何意义上三角形面积也是1/2,两种方法一致,应该没问题。</seed:think>要计算函数\(y=x\)在区间\([0,1]\)上的定积分\(\int_{0}^{1}x\,\text{d}x\),可通过以下方法求解:
### **方法一:几何意义**  
函数\(y=x\)是过原点的直线,在区间\([0,1]\)上,它与\(x\)轴、\(x=1\)围成的图形是**直角三角形**:  
- 直角顶点在\((0,0)\),两条直角边分别沿\(x\)轴(长度1)和\(y\)轴(长度1),  
- 三角形面积公式:\(S=\frac{1}{2}\times底\times高=\frac{1}{2}\times1\times1=\frac{1}{2}\)。  
定积分的几何意义是曲边梯形的面积,故\(\int_{0}^{1}x\,\text{d}x=\frac{1}{2}\)。
### **方法二:牛顿-莱布尼茨公式**  
若\(F(x)\)是\(f(x)=x\)的原函数,则\(\int_{a}^{b}f(x)\,\text{d}x=F(b)-F(a)\)。  
- \(f(x)=x\)的原函数为\(F(x)=\frac{1}{2}x^2\)(因\(F'(x)=x\)),  
- 代入得:\(\int_{0}^{1}x\,\text{d}x=F(1)-F(0)=\frac{1}{2}\times1^2-\frac{1}{2}\times0^2=\frac{1}{2}\)。
### **方法三:定积分定义(积分和极限)**  
将\([0,1]\)分成\(n\)等份,每个小区间长度\(\Delta x=\frac{1}{n}\),取右端点\(\xi_i=\frac{i}{n}\),则:  
\[
\int_{0}^{1}x\,\text{d}x=\lim_{n\to\infty}\sum_{i=1}^{n}f(\xi_i)\Delta x=\lim_{n\to\infty}\sum_{i=1}^{n}\left(\frac{i}{n}\cdot\frac{1}{n}\right)=\lim_{n\to\infty}\frac{1}{n^2}\sum_{i=1}^{n}i
\]  
利用\(\sum_{i=1}^{n}i=\frac{n(n+1)}{2}\),得:  
\[
\lim_{n\to\infty}\frac{1}{n^2}\cdot\frac{n(n+1)}{2}=\lim_{n\to\infty}\frac{n+1}{2n}=\frac{1}{2}
\]
**答案:\(\boxed{\frac{1}{2}}\)**

image.gif

对比一下我们可以看到,在不同的thinking_budget下,模型的thinking部分的表现并不一样。这来源于模型的system字段不同:

You are an intelligent assistant that can answer questions in one step without the need for reasoning and thinking, that is, your thinking budget is 0. Next, please skip the thinking process and directly start answering the user\'s questions.\n'

image.gif

以及

You are an intelligent assistant with reflective ability. In the process of thinking and reasoning, you need to strictly follow the thinking budget, which is 1024. That is, you need to complete your thinking within 1024 tokens and start answering the user's questions. You will reflect on your thinking process every 256 tokens, stating how many tokens have been used and how many are left.\n

image.gif

在不同的thinking budget下,模型会使用不同的system字段,并在thinking部分不断自我提醒剩余toke

<seed:cot_budget_reflect>I have used 261 tokens, and there are 763 tokens remaining for use.</seed:cot_budget_reflect>

image.gif

因此我们在训练时,也会遵循这种方式。SWIFT针对该模型支持的特性有:

  1. 支持THINKING_BUDGET环境变量手动指定thinking budget,默认没有值,既在推理时budget为0,训练时根据数据集行的最大thinking token自动指派budget
  2. 支持SEED_USE_THINKING=true/false环境变量针对非thinking数据集进行budget=0的空thinking改造,为false时不添加thinking部分,默认值true
  3. 支持SEED_USE_BUDGET_INTERVAL=true/false环境变量针对thinking部分自动添加<seed:cot_budget_reflect>部分,默认值false

 

下面我们给出一个完整的例子:

NPROC_PER_NODE=8 \
SEED_USE_BUDGET_INTERVAL=true \
swift sft \
    --model ByteDance-Seed/Seed-OSS-36B-Instruct \
    --dataset swift/Chinese-Qwen3-235B-Thinking-2507-Distill-data-110k-SFT#2000 \
    --train_type lora \
    --torch_dtype bfloat16 \
    --per_device_train_batch_size 2 \
    --learning_rate 1e-5 \
    --load_from_cache_file false \
    --deepspeed zero3 \
    --target_modules all-linear \
    --gradient_accumulation_steps 1 \
    --save_total_limit 2 \
    --save_only_model true \
    --logging_steps 5 \
    --max_length 2048 \
    --warmup_ratio 0.05 \
    --attn_impl flash_attn

image.gif

看下生成后的一条数据样例:

[INFO:swift] [INPUT] <seed:bos>system
You are an intelligent assistant with reflective ability. In the process of thinking and reasoning, you need to strictly follow the thinking budget, which is 1024. That is, you need to complete your thinking within 1024 tokens and start answering the user's questions. You will reflect on your thinking process every 256 tokens, stating how many tokens have been used and how many are left.
<seed:eos><seed:bos>user
2004年,野餐有60个孩子。2005年,与2004年相比,有一半的孩子来参加野餐。2006年,与2005年相比,有2/3的孩子来参加野餐。2006年有多少孩子来参加野餐?<seed:eos><seed:bos>assistant
<seed:think>我现在要解决的问题是:2004年野餐有60个孩子,2005年比2004年少一半,2006年比2005年少2/3,问2006年有多少孩子。首先,我需要理清楚每年的变化情况,可能需要分步骤计算。
首先,2004年是60个孩子。2005年与2004年相比,有一半的孩子来参加,也就是2005年的人数是2004年的一半。那2005年的人数应该是60乘以1/2,对吧?60的一半是30,所以2005年有30个孩子。
<seed:cot_budget_reflect>I have used 327 tokens, and there are 697 tokens remaining for use.</seed:cot_budget_reflect>
接下来是2006年,题目说与2005年相比,有2/3的孩子来参加。这里需要注意,“有2/3的孩子”是指2006年的人数是2005年的2/3吗?还是说比2005年多了2/3?不过题目里说“与2005年相比,有2/3的孩子来参加”,通常这种说法应该是2006年的人数是2005年的2/3。比如,如果说“比去年少一半”,就是去年的一半,这里“有2/3”应该是指2006年的人数是2005年的2/3。
那2005年是30个孩子,2006年就是30乘以2/3。30乘2/3等于20,所以2006年应该有20个孩子。
不过我需要再确认一下题目中的描述是否正确。题目说“2005年,与2004年相比,有一半的孩子来参加野餐”,也就是2005年的人数是2004年的一半,即60×1/2=30,没错。
<seed:cot_budget_reflect>I have used 515 tokens, and there are 509 tokens remaining for use.</seed:cot_budget_reflect>
然后“2006年,与2005年相比,有2/3的孩子来参加野餐”,这里的“有2/3”应该是指2006年的人数是2005年的2/3,所以30×2/3=20。应该是对的。
可能需要注意的是,有时候可能会有歧义,比如“比2005年多2/3”或者“比2005年少2/3”,但题目里说的是“有2/3的孩子”,也就是数量是2005年的2/3,所以应该是正确的。
再检查一遍计算:2004年60,2005年60/2=30,2006年30×(2/3)=20。对的,结果应该是20。</seed:think>
2004年野餐有60个孩子。  
- **2005年**:与2004年相比,有一半的孩子参加,即 $60 \times \frac{1}{2} = 30$ 人。  
- **2006年**:与2005年相比,有 $\frac{2}{3}$ 的孩子参加,即 $30 \times \frac{2}{3} = 20$ 人。  
**答案:2006年有20个孩子来参加野餐。**<seed:eos>

image.gif

可以看到,在原始数据集的基础上,增加了<seed:cot_budget_reflect> I have used 515 tokens, and there are 509 tokens remaining for use.</seed:cot_budget_reflect>部分。

如果使用了一个不带有<think>...</think>部分的数据集,会自动增加budget=0的描述,或者也可以使用原始数据集训练而不增加任何思考内容。

训练loss:

 

image.gif 编辑

显存占用:

 

image.gif 编辑

ms-swift开源地址:

https://github.com/modelscope/ms-swift

点击链接,直达模型链接~

https://modelscope.cn/collections/Seed-OSS-93213ae8624640

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
目录
相关文章
|
4月前
|
人工智能 算法 测试技术
轻量高效,8B 性能强劲书生科学多模态模型Intern-S1-mini开源
继 7 月 26 日开源『书生』科学多模态大模型 Intern-S1 之后,上海人工智能实验室(上海AI实验室)在8月23日推出了轻量化版本 Intern-S1-mini。
679 50
|
3月前
|
编解码 文字识别 自然语言处理
腾讯混元生图模型升级2.1版本:支持写字、2k分辨率,开源!
腾讯混元生图模型升级2.1版本:支持写字、2k分辨率,开源!
351 14
|
4月前
|
编解码 自然语言处理
通义万相开源14B数字人Wan2.2-S2V!影视级音频驱动视频生成,助力专业内容创作
今天,通义万相的视频生成模型又开源了!本次开源Wan2.2-S2V-14B,是一款音频驱动的视频生成模型,可生成影视级质感的高质量视频。
1116 29
|
4月前
|
人工智能 自然语言处理 物联网
魔搭社区模型速递(8.10-8.16)
🙋魔搭ModelScope本期社区进展:📟5285个模型,📁497个数据集,🎨59个创新应用,📄 9篇内容
385 0
|
4月前
|
机器人 图形学 开发者
腾讯混元最新开源:一张图,秒变游戏大片
有没有想过,随手拍的一张风景照,下一秒就能变成可操控的游戏开放世界?
403 3
|
4月前
|
数据采集 机器学习/深度学习 编解码
小红书 hi lab开源最强多模态大模型dots.vlm1,性能对标闭源 Gemini 2.5 Pro 和 Seed-VL1.5
小红书 hi lab开源最强多模态大模型dots.vlm1,性能对标闭源 Gemini 2.5 Pro 和 Seed-VL1.5
567 0
小红书 hi lab开源最强多模态大模型dots.vlm1,性能对标闭源 Gemini 2.5 Pro 和 Seed-VL1.5
|
4月前
|
编解码 人工智能 小程序
魔搭社区模型速递(8.17-8.23)
🙋魔搭ModelScope本期社区进展:📟1652个模型,📁216个数据集,🎨54个创新应用,📄 4篇内容
556 8
魔搭社区模型速递(8.17-8.23)
|
4月前
智谱发布GLM-4.5V,全球开源多模态推理新标杆,Day0推理微调实战教程到!
视觉语言大模型(VLM)已经成为智能系统的关键基石。随着真实世界的智能任务越来越复杂,VLM模型也亟需在基本的多模态感知之外,逐渐增强复杂任务中的推理能力,提升自身的准确性、全面性和智能化程度,使得复杂问题解决、长上下文理解、多模态智能体等智能任务成为可能。
743 0
|
3月前
|
人工智能 编解码 数据可视化
原生支持QwenImage!FlowBench 正式开启公测!本地 + 云端双模生图,AI创作更自由
FlowBench 是由 ModelScope x Muse 团队打造的一站式 AI 工作流创作平台,现已开启全面公测。该平台以工作流为核心,支持本地与云端资源协同运行,面向开发者、设计师及 AI 创作者提供高效、稳定、易用的可视化创作体验。FlowBench 原生支持 QwenImage 图像生成模型,最低仅需 8GB 显存即可实现本地生图,并支持多 LoRA 融合、多图批量生成等强大功能。用户可在 Mac 和 Windows 系统下载使用,同时享受云端与本地自由切换带来的灵活体验。公测期间,FlowBench 团队将持续优化功能,推出更多创新特性,助力用户开启高效 AI 创作之旅。
773 11

热门文章

最新文章