模型简介
模型特点
模型能力
使用案例
🚀 Instella-Long✨:具备长上下文能力的完全开源语言模型
Instella-Long是一款由AMD开发的长上下文语言模型,它基于Instella-3B-Instruct在AMD Instinct™ MI300X GPU上进行持续训练。据我们所知,Instella-Long使Instella系列成为首个从头开始训练的、支持长上下文的完全开源语言模型。Instella-Long能够支持128K的上下文长度,并且在长上下文基准测试中,其性能优于Phi-3.5-mini、Gemma-3-4B和Qwen2.5-3B等开源权重模型。
通过在Instinct MI300X GPU上对Instella进行长上下文扩展训练,我们展示了AMD硬件在处理复杂AI训练工作负载方面的能力和可扩展性,为AI硬件领域提供了一个可行的选择。秉承AMD对开源的承诺,我们将分享所有的模型权重、详细的训练配置、数据集和代码,以便AI社区能够进行协作、复现和创新,从而加速技术进步。
✨ 主要特性
- AMD发布了支持128K上下文长度的3B长上下文语言模型Instella-Long,该模型在64个Instinct MI300X GPU上进行训练。
- 据我们所知,Instella-Long使Instella系列成为首个从头开始训练的、支持长上下文的完全开源语言模型。Hugging Face模型、训练数据和训练代码均完全开源。
- 在AMD ROCm软件栈的支持下,Instella-Long采用了序列并行(Sequence Parallelism)、FlashAttention - 2、Torch Compile和FSDP等高效训练技术,可在8个MI300节点(每个节点配备8个GPU)上进行模型分布式训练。
📦 安装指南
文档未提及安装步骤,故跳过此章节。
💻 使用示例
基础用法
from transformers import AutoModelForCausalLM, AutoTokenizer
checkpoint = "amd/Instella-3B-Long-Instruct"
tokenizer = AutoTokenizer.from_pretrained(checkpoint, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(checkpoint, device_map="auto", trust_remote_code=True)
prompt = [{"role": "user", "content": "What are the benefits of open-source AI research?"}]
inputs = tokenizer.apply_chat_template(
prompt,
add_generation_prompt=True,
return_tensors='pt'
)
tokens = model.generate(
inputs.to(model.device),
max_new_tokens=1024,
temperature=0.8,
do_sample=True
)
print(tokenizer.decode(tokens[0], skip_special_tokens=False))
📚 详细文档
Instella-Long模型概述
Instella-Long基于3月份发布的Instella模型,具体来说,它是在Instella - 3B - Instruct的基础上进行持续训练的,并且采用了相同的模型架构。Instella-Long的训练分为三个阶段:1. 持续预训练;2. 有监督微调(SFT);3. 直接偏好优化(DPO)。
持续预训练
- 训练过程:我们从Instella - 3B - Instruct(4K上下文长度)开始进行两阶段预训练。
- 数据来源:我们的持续预训练数据来自Prolong创建的数据混合集。我们使用Prolong整理的文本数据,并使用我们的分词器对数据进行分词。在持续预训练的每个阶段,我们都在长上下文和短上下文数据的混合集上进行训练。具体细节如下:
训练阶段 | 64K长数据 | 256K长数据 | 短数据 |
---|---|---|---|
阶段1 | 代码库(30%)、书籍(30%)、教科书(3%) | - | FineWeb - Edu(10%)、FineWeb(10%)、StackExchange(4%)、维基百科(5%)、ArXiv(3%)、OpenWebMath(5%) |
阶段2 | 代码库(10%)、书籍(15%) | 代码库(20%)、书籍(15%)、教科书(2%) | FineWeb - Edu(10%)、FineWeb(10%)、StackExchange(4%)、维基百科(5%)、ArXiv(4%)、OpenWebMath(5%) |
有监督微调(SFT)
- 训练过程:在长上下文预训练数据上进行持续训练后,我们在长上下文指令数据上进行有监督微调。我们使用10亿个标记的短上下文和长上下文指令数据混合集对模型进行训练。
- 数据来源:与持续预训练阶段类似,我们在短上下文和长上下文指令数据的混合集上对模型进行训练,比例为4:6。对于短上下文指令数据,我们使用Ultrachat 200K、OpenMathinstruct - 2、Tülu - 3 Instruction Following和MMLU辅助训练集。由于缺乏长上下文SFT数据,我们构建了一个合成的长上下文指令数据集。具体来说,我们使用持续预训练数据集中的书籍长文档,选择长度至少为8K标记的文档,并将超过128K标记的文档截断为最大长度128K。然后,我们使用Qwen2.5 - 14B - Instruct - 1M作为教师模型,为文档合成生成问答对。为了加快这个过程,我们随机选择文档的一个子部分进行问答生成,而不是使用整个文档。子部分的长度随机设置为2K到8K标记之间。我们使用NLTK句子分词器将文档划分为句子,以确保所选子部分包含完整的句子。生成的问题和答案被附加到长文档的末尾,作为一个完整的单轮指令跟随数据样本。此外,我们还使用短文档生成长上下文指令数据,以增加数据集的多样性。我们使用持续预训练语料库中的ArXiv和Dolmino - Mix - 1124中的DCLM子集。我们首先按照上述相同的流程为每个短文档生成问答对。然后,我们迭代地连接不同的短文档,直到达到128K标记。由于我们不截断最后一个文档,连接后的文档可能会超过128K。最后,我们随机选择一个与短文档对应的问答对,并将其附加到连接后的文档末尾。SFT阶段的最终数据混合集如下:
短数据 | 长数据 |
---|---|
Ultrachat 200K(25%)、OpenMathinstruct - 2(10%)、MMLU辅助训练集(3%)、Tülu - 3 Instruction Following(2%) | 书籍(44%)、DCLM(10%)、ArXiv(6%) |
直接偏好优化(DPO)
- 训练过程:在最后一个训练阶段,我们使用直接偏好优化进行人类偏好对齐训练。我们采用与Instella - 3B - Instruct相同的DPO训练方法,并使用相同的数据。与之前的训练阶段不同,在DPO阶段,我们仅在最大上下文长度为2K的短数据上进行训练。与其他开源权重模型的研究结果一致,我们发现仅在短数据上进行DPO训练可以继续提高模型在长上下文任务上的性能。
- 数据来源:我们使用OLMo - 2 - 1124 - 7B - Preference - Mix数据集作为DPO数据,该数据集包含7.6亿个标记。
序列并行
为了支持极长输入的训练,我们基于Deepspeed Ulysses实现了序列并行。序列并行在注意力计算过程中将注意力头分布到多个GPU上,在GPU通信方面比环形注意力(Ring - Attention)更高效。由于输入长度较长,我们在阶段2的持续预训练和SFT中使用四个GPU作为一个序列并行组。
🔧 技术细节
评估结果
- 我们在Helmet上评估了模型的长上下文性能,Helmet是一个最近发布的、全面的长上下文评估基准,涵盖了多个类别。与之前的长上下文基准相比,Helmet在人类感知方面表现出更好的一致性。
- Instella - 3B - Long - Instruct在Helmet基准测试的大多数任务中优于Phi - 3.5 - mini - instruct、Gemma - 3 - 4B - it、Qwen2.5 - 3B - Instruct和MiniCPM - 2B - 128k等开源权重模型。
- 我们在8K、16K和32K上下文长度下与Qwen2.5 - 3B - Instruct进行了对比,Instella - 3B - Long - Instruct的平均性能比Qwen2.5 - 3B - Instruct高2.75%。
模型 | 大小 | 训练标记数(从头开始) | 自然问题(RAG) | TriviaQA(RAG) | HotpotQA(RAG) | InfiniteBench QA | InfiniteBench MC | NarrativeQA | NIAH(多值针) | 平均 |
---|---|---|---|---|---|---|---|---|---|---|
Llama - 3.2 - 3B - Instruct | 3.21B | ~9T | 51.8 | 86.2 | 56.4 | 38.7 | 56.0 | 26.0 | 99.2 | 59.19 |
Phi - 3.5 - mini - instruct | 3.82B | - | 41.2 | 78.6 | 48.6 | 24.0 | 55.0 | 27.7 | 87.0 | 51.73 |
gemma - 3 - 4b - it | 4.3B | ~4T | 47.2 | 76.8 | 45.2 | 21.0 | 49.0 | 20.7 | 74.0 | 47.70 |
Qwen2.5 - 3B - Instruct | 3.09B | ~18T | 34.6 | 65.8 | 41.8 | 14.7 | 35.0 | 21.0 | 80.4 | 41.90 |
MiniCPM - 2B - 128k | 2.4B | ~1T | 28.4 | 61.6 | 30.8 | 3.7 | 22.0 | 3.3 | 46.6 | 28.06 |
Instella - 3B - Long - Instruct | 3.11B | ~4T | 43.6 | 73.0 | 51.6 | 30.7 | 54.0 | 32.3 | 84.0 | 52.74 |
表1:在Helmet基准测试上的长上下文评估。NIAH和RAG任务在8K、16K、32K、64K和128K五个上下文长度下进行评估,并报告五个上下文长度的平均值。InfiniteBench QA、InfiniteBench MC和NarrativeQA在128K上下文长度下进行评估。InfiniteBench由Helmet重新实现。
模型 | NIAH(多值针) - 8K | NIAH(多值针) - 16K | NIAH(多值针) - 32K | 自然问题(RAG) - 8K | 自然问题(RAG) - 16K | 自然问题(RAG) - 32K | TriviaQA(RAG) - 8K | TriviaQA(RAG) - 16K | TriviaQA(RAG) - 32K | HotpotQA(RAG) - 8K | HotpotQA(RAG) - 16K | HotpotQA(RAG) - 32K | 平均 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Instella - 3B - Long - Instruct | 98 | 95 | 87 | 53 | 49 | 46 | 79 | 73 | 75 | 59 | 59 | 51 | 68.67 |
Qwen2.5 - 3B - Instruct | 95 | 94 | 95 | 48 | 42 | 39 | 77 | 78 | 74 | 51 | 50 | 48 | 65.92 |
表2:在8K、16K、32K上下文长度下与Qwen2.5 - 3B - Instruct的对比。
评估指标
- 对于包括自然问题、TriviaQA和HotpotQA在内的RAG任务,我们使用子字符串精确匹配(SubEM)。
- 对于NIAH,我们使用召回率;对于InfiniteBench MC,我们使用精确匹配。
- 对于InfiniteBench QA和NarrativeQA,由于答案是开放式的,我们使用gpt - 4o - mini根据Helmet提供的提示和指标对答案与真实值进行评估。
模型 | MMLU | IFEval | MT - Bench | TruthfulQA | Toxigen(↓) | Crows - Pair |
---|---|---|---|---|---|---|
Instella - 3B - Instruct | 58.90 | 71.35 | 7.23 | 55.47 | 57.02 | 58.86 |
Instella - 3B - Long - Instruct | 57.44 | 68.76 | 6.83 | 55.52 | 42.34 | 60.05 |
表3:与Instella - 3B - Instruct的短上下文基准对比。
短上下文结果
与Instella - 3B - Instruct相比,我们观察到Instella - 3B - Long - Instruct在一些短上下文基准测试中的性能有所下降。有趣的是,TruthfulQA保持稳定,而Crows - Pair略有改善,这表明在某些负责任的AI指标上可能有所提升。Toxigen的降低(从57.02降至42.34,越低越好)表明长上下文版本在避免毒性方面有所改进。我们推测这些结果反映了在优化更长上下文长度和保持短上下文性能之间的权衡,这种权衡在3B参数规模下可能比更大模型更为明显。
训练数据
阶段 | 数据集 | 许可证 |
---|---|---|
持续预训练 - 阶段1 | https://huggingface.co/datasets/amd/Instella - Long/tree/main/pretrain - phase - 1 | ResearchRAIL |
持续预训练 - 阶段2 | https://huggingface.co/datasets/amd/Instella - Long/tree/main/pretrain - phase - 2 | ResearchRAIL |
SFT | https://huggingface.co/datasets/amd/Instella - Long/tree/main/sft | ResearchRAIL |
DPO | https://huggingface.co/datasets/allenai/olmo - 2 - 1124 - 7b - preference - mix | ODC - BY - 1.0 |
⚠️ 重要提示
有关训练数据集的更多信息,包括适用的许可条款和使用限制,可在链接的源位置找到。
📄 许可证
本项目使用其他许可证,具体请查看LICENSE文件。
总结
Instella-Long模型的发布是开源AI发展的重要一步,展示了AMD硬件在语言模型训练方面的能力。据我们所知,Instella-Long使Instella系列成为首个从头开始训练的、支持长上下文的完全开源语言模型,并且与开源权重模型相比,具有有竞争力的性能。
通过完全开源Instella-Long模型,包括权重、训练配置、数据集和代码,我们旨在促进AI社区的创新和协作。我们相信,透明度、可复现性和社区参与对于推动AI技术的发展至关重要。



