全球最长开源大模型!元象开源 XVERSE-Long-256K!(附魔搭社区推理微调最佳实践)

简介: 近日,元象发布全球首个上下文窗口长度256K的开源大模型XVERSE-Long-256K,支持输入25万汉字,让大模型应用进入“长文本时代”。该模型全开源,无条件免费商用,目前魔搭社区可下载体验。

近日,元象发布全球首个上下文窗口长度256K的开源大模型XVERSE-Long-256K,支持输入25万汉字,让大模型应用进入“长文本时代”。该模型全开源,无条件免费商用,目前魔搭社区可下载体验。

参数量和高质量数据量决定了大模型的计算复杂度,而长文本技术(Long Context)是大模型应用发展“杀手锏”,因技术新、研发难度高,目前多为闭源付费提供XVERSE-Long-256K 支持超长文本输入,可用于大规模数据分析、多文档阅读理解、跨领域知识融合,有效提升大模型应用的深度与广度:

一、为律师、金融分析师或咨询师、prompt 工程师、科研人员等解决分析处理较长文本的工作;

二、在角色扮演或聊天应用中,缓解模型“忘记”之前对话的记忆力问题,或胡说八道的“幻觉”问题等;

三、更好支持智能体(AI Agent)基于历史信息进行规划和决策;

四、帮助AI原生应用保持连贯、个性化的用户体验。

至此,XVERSE-Long-256K 填补了开源生态空白,还与元象此前70亿、130亿、650亿参数大模型组成“高性能全家桶”,将国产开源提升至国际一流水平。

元象大模型系列

面对数十万Tokens的超长上下文窗口,大模型研发面临诸多技术挑战,比如要确保长文本下关注内容的准确性、文本长度与推理速度的平衡、指数级递增的计算量、显存与带宽的巨大需求。而业界常见的滑动窗口、降采样、小模型等“捷径”方法,虽提升了窗口长度,但不同程度牺牲了模型性能,让模型实际应用价值大打折扣。

元象通过算法与工程上的极致优化与突破,在第一阶段ABF+继续预训练,第二阶段NTK+SFT的技术优化,实现了无损长程注意力机制,让窗口长度与模型性能同步提升。官方提供“手把手模型训练详细教程与技术解析。

下载元象大模型

用户可登录大模型官网(chat.xverse.cn)或小程序即刻体验 XVERSE-Long-256K。

模型性能评测

为确保业界对元象大模型有全面、客观和长期的认知,研究人员参考权威行业测评,制定了六个维度的9项综合测评体系。XVERSE-Long-256K 均表现出色,超越其他长文本模型。

全球主流长文本开源大模型评测结果

XVERSE-Long-256K 还通过了“大海捞针”这一常见的长文本大模型性能压力测试。该测试是在长文本语料(即“大海”)中藏入与其内容无关的一个句子(即“针”),并通过自然语言提问让大模型准确提取“针”。

研究人员将四根“针”分别放到了文本语料中从前到后17个不同位置,在1K到256K等量分布的不同长度语料(共32份)中,进行了2176次测试(4x17x32),XVERSE-Long 提取准确率极佳,达99.67%。

应用案例展示

XVERSE-Long-256K 在大规模数据分析、多文档阅读理解、跨领域知识融合上能力出众,更重要的是能推动大模型应用深层次的产业落地,比如在金融、司法、科研等精艰深的领域发展。具体案例:

长篇小说 阅读理解

以《射雕英雄传》为例,可展示元象大模型在文本理解、人物动机分析、信息检索、准确推断等方面综合能力。 如郭靖初遇黄蓉时未正面描写人物着装,但模型通过原文“店小二见郭靖身上一件黑貂甚是珍贵,心想就算你会不出钞,把这件黑貂皮剥下来抵数也尽够了”,能推断出郭靖身着黑貂皮袄。

《射雕英雄传》测试

40+多语种 阅读理解

目前国内多数大模型仅支持中英双语,元象支持40多种语言,以下对16万字符的俄语经典小说《钢铁是怎样炼成的》、41万字符的德语历史传记《人类群星闪耀时》进行测试。

《钢铁是怎样炼成的(俄文版)》测试

《人类群星闪耀时(德文版)》测试

金融研究报告 分析预测  对包含大量专业术语的研究报告进行数据、趋势相关解读和分析,以1.6万字的《光伏行业2024年策略报告》为例:

《光伏行业2024年策略报告》

法律法条 精准应用

以《中华人民共和国民法典》为例,展示对法律术语的解释,以及对案例进行逻辑分析、结合实际的灵活应用:

《民法典》测试

魔搭社区推理&微调最佳实践

  环境配置与安装

  1. python 3.8及以上版本
  2. pytorch 1.12及以上版本,推荐2.0及以上版本
  3. 建议使用CUDA 11.4及以上

使用步骤

本文主要演示的模型为XVERSE-13B-256K模型.

  模型推理

XVERSE-13B-256K模型链接:

https://modelscope.cn/models/xverse/XVERSE-13B-256K/summary

推理代码:

import torch
from modelscope import AutoTokenizer, AutoModelForCausalLM, snapshot_download
from modelscope import GenerationConfig
model_path = snapshot_download('xverse/XVERSE-13B-256K',revision = 'v1.0.0')
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(model_path, trust_remote_code=True, torch_dtype=torch.bfloat16, device_map='auto')
model.generation_config = GenerationConfig.from_pretrained(model_path)
model = model.eval()
history = [{"role": "user", "content": "1955年谁是美国总统?他是什么党派?"}]
response = model.chat(tokenizer, history)
print(response)
history.append({"role": "assistant", "content": response})
history.append({"role": "user", "content": "他任职了多少年"})
response = model.chat(tokenizer, history)
print(response)

资源消耗:

单卡A100可运行,如果自己的显卡显存不够,可以考虑使用多张3090显卡。

  XVERSE-13B-256K微调和微调后推理

我们使用SWIFT来对模型进行微调, SWIFT是魔搭社区官方提供的LLM&AIGC模型微调推理框架。

微调代码开源地址: https://github.com/modelscope/swift

我们使用数据集advertise-gen-zh进行微调,任务是: 根据物品简要的特征来编写广告词。

环境准备:

git clone https://github.com/modelscope/swift.git
cd swift
pip install .[llm]
微调脚本: LoRA
# https://github.com/modelscope/swift/tree/main/examples/pytorch/llm/scripts/xverse_13b_256k
# Experimental environment: A100
# 40GB GPU memory
CUDA_VISIBLE_DEVICES=0 \
swift sft \
    --model_type xverse-13b-256k \
    --sft_type lora \
    --tuner_backend swift \
    --template_type default-generation \
    --dtype AUTO \
    --output_dir output \
    --dataset advertise-gen-zh \
    --train_dataset_sample 20000 \
    --num_train_epochs 1 \
    --max_length 2048 \
    --check_dataset_strategy warning \
    --lora_rank 8 \
    --lora_alpha 32 \
    --lora_dropout_p 0.05 \
    --lora_target_modules ALL \
    --gradient_checkpointing true \
    --batch_size 1 \
    --weight_decay 0.01 \
    --learning_rate 1e-4 \
    --gradient_accumulation_steps 16 \
    --max_grad_norm 0.5 \
    --warmup_ratio 0.03 \
    --eval_steps 100 \
    --save_steps 100 \
    --save_total_limit 2 \
    --logging_steps 10 \

训练过程也支持本地数据集,需要指定如下参数:

--custom_train_dataset_path xxx.jsonl \
--custom_val_dataset_path yyy.jsonl \

自定义数据集的格式可以参考:

https://github.com/modelscope/swift/blob/main/docs/source/LLM/自定义与拓展.md#注册数据集的方式

微调后推理脚本:

(这里的ckpt_dir需要修改为训练生成的checkpoint文件夹)

# Experimental environment: A100
CUDA_VISIBLE_DEVICES=0 \
swift infer \
    --ckpt_dir "output/xverse-13b-256k/vx_xxx/checkpoint-xxx" \
    --load_dataset_config true \
    --max_length 2048 \
    --max_new_tokens 2048 \
    --temperature 0.7 \
    --top_p 0.7 \
    --repetition_penalty 1. \
    --do_sample true \
    --merge_lora_and_save false \

训练后生成样例:

[PROMPT]Task: Generating advertisements based on keywords.
Keywords: 类型#上衣*材质#牛仔布*颜色#白色*风格#简约*图案#刺绣*衣样式#外套*衣款式#破洞
Advertisements:[OUTPUT]这款牛仔外套采用了经典的牛仔面料,质地坚韧耐磨,穿着舒适透气,不易变形。白色的衣身简约大气,上身后干净利落,彰显出青春活力。衣身上的破洞设计,彰显出时尚潮流的气息,打破了单调乏味的风格。衣身上的刺绣图案,精致细腻,彰显出品牌的品质。<|endoftext|>
[LABELS]简约而不简单的牛仔外套,白色的衣身十分百搭。衣身多处有做旧破洞设计,打破单调乏味,增加一丝造型看点。衣身后背处有趣味刺绣装饰,丰富层次感,彰显别样时尚。
--------------------------------------------------
[PROMPT]Task: Generating advertisements based on keywords.
Keywords: 类型#裤*版型#显瘦*颜色#黑色*风格#简约*裤长#九分裤
Advertisements:[OUTPUT]这款九分裤的裤长恰好可以露出脚踝,可以很好的修饰腿型,而且还能展现出纤细的脚踝,显得整个人更加的修长。简约的版型,穿起来更加的舒适,而且还不会有束缚感。经典的黑色,更加的百搭,而且还能展现出干练的风格。<|endoftext|>
[LABELS]个性化的九分裤型,穿着在身上,能够从视觉上拉长你的身体比例,让你看起来更加的有范。简约的黑色系列,极具时尚的韵味,充分凸显你专属的成熟韵味。修身的立体廓形,为你塑造修长的曲线。

点击直达模型卡片:XVERSE-13B-256K · 模型库 (modelscope.cn)

相关文章
|
缓存 JavaScript 前端开发
GIAC-2022sh 学习笔记 | 开放原子开源基金会-贺师俊-ES2022 — JS is dead, long live ecosystem
GIAC-2022sh 学习笔记 | 开放原子开源基金会-贺师俊-ES2022 — JS is dead, long live ecosystem
179 0
GIAC-2022sh 学习笔记 | 开放原子开源基金会-贺师俊-ES2022 — JS is dead, long live ecosystem
|
6月前
|
JSON JavaScript 前端开发
解决js中Long类型数据在请求与响应过程精度丢失问题(springboot项目中)
解决js中Long类型数据在请求与响应过程精度丢失问题(springboot项目中)
509 0
|
6月前
|
编译器 C语言
c语言中long的作用类型
c语言中long的作用类型
152 0
【面试题精讲】Java超过long类型的数据如何表示
【面试题精讲】Java超过long类型的数据如何表示
|
7天前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
16 3
|
6天前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
17 1
|
5天前
|
编译器 C#
c# - 运算符<<不能应用于long和long类型的操作数
在C#中,左移运算符的第二个操作数必须是 `int`类型,因此需要将 `long`类型的位移计数显式转换为 `int`类型。这种转换需要注意数据丢失和负值处理的问题。通过本文的详细说明和示例代码,相信可以帮助你在实际开发中正确使用左移运算符。
6 0
|
3月前
|
前端开发 Java 数据库
Java系列之 Long类型返回前端精度丢失
这篇文章讨论了Java后端实体类中Long类型数据在传递给前端时出现的精度丢失问题,并提供了通过在实体类字段上添加`@JsonSerialize(using = ToStringSerializer.class)`注解来确保精度的解决方法。
|
6月前
|
安全 Java 编译器
long类型在32位操作系统上的安全问题
long类型在32位操作系统上的安全问题
154 1
|
5月前
|
Java
springboot解决jackson序列化Long类型精度失效问题
springboot解决jackson序列化Long类型精度失效问题
133 0