导读
近日,中国电信人工智能研究院开源12B参数规模星辰语义大模型TeleChat-12B,相较1月开源7B版本,内容、性能和应用等方面整体效果提升30%,其中,多轮推理、安全问题等领域提升超40%。在C-eval、MMLU、AGIEVAL等国际权威榜单上,排名处于国内同级别参数开源模型的前列,进一步促进大模型开源生态繁荣,助力AI产业加速高质量发展。另据悉,中国电信人工智能研究院将于年内开源千亿级参数大模型。
中国电信人工智能研究院(TeleAI)坚持完全自研自主可控,在中国电信首席技术官、首席科学家、TeleAI院长李学龙带领下,加快研发创新,不断优化底层模型结构,解除Word Embedding与lmhead共享参数,有效提升模型稳定性和训练效果,并基于精细化的CheckPoint效果验证,进行动态的数据配比优化调整,大幅提升模型训练效果。
海量高质量数据是保证大模型效果的基础,TeleChat-12B将7B版本1.5T训练数据提升至3T,优化数据清洗、标注策略,持续构建专项任务SFT(监督微调)数据,优化数据构建规范,大大提升数据质量;同时,基于电信星辰大模型用户真实回流数据,优化奖励模型和强化学习模型,有效提升模型问答效果。
TeleAI通过更彻底地开源推动大模型技术进步和大模型国产化进程。此次开源提供基础模型以及基于相应版本的对话模型、不仅支持传统的全量参数更新还支持 LoRA 等只更新部分参数的高效微调方法、支持Deepspeed微调、支持int8、int4量化和国产芯片训练推理,推动大模型国产化进程。
加速探索创新的同时,星辰大模型也在深入推动人工智能与各行各业的融合,积极探索新兴的应用场景。星辰语义大模型已应用于行文写作、代码编程、网络故障分析以及经营分析等场景,以行文写作为例,其平均生成字数超过1500字,有效采纳率达到85.7%;在对外企事业单位客户的业务中,星辰语义大模型支持企业经营分析、政务公开咨询、民生诉求接待等场景,可覆盖95%的实际业务场景,多轮理解准确率达到90%。除传统行业应用场景,星辰大模型积极探索前沿领域应用,赋能具身智能,解决无人机编排投入多、开发量大的问题,实现无人机智能编排轻量化建设。
据悉,星辰大模型已广泛应用落地,赋能千行百业转型升级。客服大模型在全国试点上线18个服务场景,充分赋能智慧客服和数字人,在激活十亿级的日志、百亿级的网络参数等海量数据资产的基础上,进一步深化智能化运营;星辰政务大模型已落地某市民生诉求场景,为市民提供在线文本问答服务,提升政务服务能力,提高市民满意度;星辰经分大模型已落地某市经信局行业大模型,利用大模型生成能力快速草拟相关产业研究报告,简化知识检索流程,快速、精准查询所需知识内容,以便迅速、准确地掌握发展动态,支持决策过程,并追踪全球经济形势和科技创新,满足迫切的产业洞察和分析需求。
开源项目链接地址 :
- https://gitee.com/Tele-AI/tele-chat
- https://github.com/Tele-AI/Telechat
- https://modelscope.cn/organization/TeleAI
环境配置与安装
- python 3.10及以上版本
- pytorch 1.12及以上版本,推荐2.0及以上版本
- 建议使用CUDA 11.4及以上
使用步骤
本文主要演示的模型为TeleChat-12B模型及其量化版本,在PAI-DSW使用
模型链接和下载
TeleChat-12B系列模型现已在ModelScope社区开源,模型链接:
TeleChat-12B
https://modelscope.cn/models/TeleAI/TeleChat-12B/summary
TeleChat-12B-int8
https://modelscope.cn/models/TeleAI/TeleChat-12B-int8/summary
TeleChat-12B-int4
https://modelscope.cn/models/TeleAI/TeleChat-12B-int4/summary
社区支持直接下载模型的repo:
from modelscope import snapshot_download model_dir1 = snapshot_download("TeleAI/TeleChat-12B")
模型推理
TeleChat-12B推理代码:
import os import torch from modelscope import AutoModelForCausalLM, AutoTokenizer, GenerationConfig os.environ["CUDA_VISIBLE_DEVICES"] = '0' tokenizer = AutoTokenizer.from_pretrained('TeleAI/TeleChat-12B') model = AutoModelForCausalLM.from_pretrained('TeleAI/TeleChat-12B', trust_remote_code=True, device_map="auto", torch_dtype=torch.float16) generate_config = GenerationConfig.from_pretrained('TeleAI/TeleChat-12B') question="生抽与老抽的区别?" answer, history = model.chat(tokenizer = tokenizer, question=question, history=[], generation_config=generate_config, stream=False) print(answer) #生抽和老抽是两种不同的酱油,它们的区别如下: #1. 原料不同:生抽是用大豆、小麦等谷物为原料制成的;而老抽则是用豆酱、面酱等发酵后的调味品为原料制成的。 #2. 制作工艺不同:生抽是通过将大豆浸泡在水中,然后经过蒸煮、发酵等过程制成的;而老抽则是在生抽的基础上加入一定比例的盐、糖、味精等调料,再进行发酵制成的。 #3. 口感和风味不同:生抽具有咸鲜的味道,口感比较清爽;而老抽则具有特殊的香味和味道,口感相对较重。 #总的来说,生抽和老抽都是酱油的不同种类,它们在原料、制作工艺和口感等方面都有所不同。
资源消耗:
TeleChat-12B-int4推理代码:
环境依赖
pip install auto-gptq==0.3.0 git clone https://github.com/Tele-AI/Telechat.git cd Telechat/quant/
推理代码
from modelscope import AutoTokenizer, GenerationConfig,snapshot_download from modeling_telechat_gptq import TelechatGPTQForCausalLM PATH = snapshot_download("TeleAI/TeleChat-12B-int4") tokenizer = AutoTokenizer.from_pretrained(PATH, trust_remote_code=True) model = TelechatGPTQForCausalLM.from_quantized(PATH, device="cuda:0", inject_fused_mlp=False, inject_fused_attention=False, trust_remote_code=True) generate_config = GenerationConfig.from_pretrained(PATH) model.eval() question = "生抽与老抽的区别?" answer, history = model.chat(tokenizer=tokenizer, question=question, history=[], generation_config=generate_config, stream=False) print("回答:", answer)
资源消耗:
TeleChat-12B微调和微调后推理
微调代码开源地址:
https://github.com/modelscope/swift/tree/main/examples/pytorch/llm
SWFIT是魔搭社区官方提供的LLM&AIGC模型微调推理框架,首先从github上将SWIFT clone下来:
# 设置pip全局镜像和安装相关的python包 pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ git clone https://github.com/modelscope/swift.git cd swift pip install .[llm] # 下面的脚本需要在此目录下执行 cd examples/pytorch/llm # 安装flash attention, 参考https://github.com/Dao-AILab/flash-attention pip install packaging pip install ninja pip install flash-attn --no-build-isolation
微调脚本
# Experiment env: A100 # 1 * 30GB GPU memory PYTHONPATH=../../.. \ CUDA_VISIBLE_DEVICES=0 \ python llm_sft.py \ --model_type telechat-12b \ --dataset dureader-robust-zh \ --batch_size 1 \ --max_length 1024 \ --gradient_accumulation_steps 16 \ --learning_rate 5e-5 \ --use_flash_attn true \ --eval_steps 1000 \ --save_steps 1000 \ --train_dataset_sample 100000 \ --val_dataset_sample 3000 \ --num_train_epochs 2 \ --check_dataset_strategy none \ --gradient_checkpointing true \ --weight_decay 0.1 \ --max_grad_norm 1.0 \ --warmup_ratio 0.03 \ --save_total_limit 2 \ --logging_steps 10 \ --sft_type lora \ --lora_target_modules DEFAULT \ --lora_rank 8 \ --lora_alpha 32 \ --dtype fp16
模型微调后的推理脚本,请将下面--ckpt_dir的值改为--output_dir中实际存储的模型weights目录。
# Experiment env: A100 # 1 * 26GB GPU memory PYTHONPATH=../../.. \ CUDA_VISIBLE_DEVICES=0 \ python llm_infer.py \ --ckpt_dir "output/telechat-12b/vx-xxx/checkpoint-xxx" \ --load_dataset_config true \ --max_length 2048 \ --use_flash_attn true \ --max_new_tokens 2048 \ --temperature 0.5 \ --top_p 0.7 \ --repetition_penalty 1. \ --do_sample true \ --merge_lora false \ --dtype fp16 \ --stream false
微调的可视化结果
训练损失:
评估损失
训练后生成样例
[PROMPT]<_user>Task: Question Generation Context: 下载速度达到72mbp/s速度相当快。相当于500兆带宽。在网速计算中, b=bit ,B=byte 8×b=1×B 意思是 8个小写的b 才是一个大写B。4M理论下载速度:4M就是4Mb/s 理论下载速度公式:4×1024÷8=512KB /s 请注意按公式单位已经变为 KB/s 依此类推: 2M理论下载速度:2×1024÷8=256KB /s 8M理论下载速度:8×1024÷8=1024KB /s =1MB/s 10M理论下载速度:10×1024÷8=1280KB /s =2M理论下载速度+8M理论下载速度 50M理论下载速度:50×1024÷8=6400KB /s 1Gb理论下载速度:1024×1024÷8=128MB /s 公式:几兆带宽×1024÷8=()KB/s。 Answer: 相当于500兆带宽 Question:<_bot>[OUTPUT] 72mbp相当于多少带宽<_end> [LABELS]72mbps是多少网速 -------------------------------------------------- [PROMPT]<_user>Task: Question Generation Context: 防水作为目前高端手机的标配,特别是苹果也支持防水之后,国产大多数高端旗舰手机都已经支持防水。虽然我们真的不会故意把手机放入水中,但是有了防水之后,用户心里会多一重安全感。那么近日最为火热的小米6防水吗?小米6的防水级别又是多少呢? 小编查询了很多资料发现,小米6确实是防水的,但是为了保持低调,同时为了不被别人说防水等级不够,很多资料都没有标注小米是否防水。根据评测资料显示,小米6是支持IP68级的防水,是绝对能够满足日常生活中的防水需求的。 Answer: IP68级 Question:<_bot>[OUTPUT] 小米6防水等级<_end> [LABELS]小米6防水等级 -------------------------------------------------- [PROMPT]<_user>Task: Question Generation Context: 我个人感觉是吕颂贤版,剧情和原著差别不大,虽然TVB演员颜值和风光没有大陆的好。但是香港特区人口和地域的限制,只能注重在演员的演技方面发挥很出色,楼主看过大陆排《笑傲江湖》吧!在台词上表现的很生硬没有香港的注重神色配台词,比如杜燕歌把吕颂贤表情和性格几乎和原著差别不大。武打几乎沿用徐克和程小东动作的风格很注重实际技巧,没有大陆版的在武打场面依靠电脑特效表现的太夸张了。李亚鹏版的武打动作和导演还是香港的元彬,大陆毕竟还是在武侠剧起步的比较晚,主要是还是靠明星大腕压阵而香港却是恰恰相反。 Answer: 吕颂贤版 Question:<_bot>[OUTPUT] 笑傲江湖哪个版本好看<_end> [LABELS]笑傲江湖哪个版本好看
资源消耗:
训练
推理
点击直达模型卡片