IDEA研究院Ziya2-13B首发魔搭社区(含社区推理微调最佳实践教程)

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,5000CU*H 3个月
模型训练 PAI-DLC,5000CU*H 3个月
简介: 10月16日,IDEA研究院(粤港澳大湾区数字经济研究院)CCNL封神榜团队开源中文基座模型Ziya2-13B-Base及其对话模型Ziya2-13B-Chat,两款模型均完全免费、可商用,已在魔搭社区首发上架。

导读



10月16日,IDEA研究院(粤港澳大湾区数字经济研究院)CCNL封神榜团队开源中文基座模型Ziya2-13B-Base及其对话模型Ziya2-13B-Chat,两款模型均完全免费、可商用,已在魔搭社区首发上架。


评测结果显示,Ziya2-13B-Base 模型在中文、英文、数学、代码等下游理解任务上的表现均明显优于Llama2-13B和Ziya-LLaMA-13B。


魔搭推出了最佳实践教程,提前跑通模型的部署、推理和微调,供开发者参考。



环境配置与安装



  1. python 3.8及以上版本 
  2. pytorch 1.12及以上版本,推荐2.0及以上版本
  3. 本文的QLoRA版本的SFT可在PAI-DSW的免费算力环境A10下运行 (显存要求13G)

pip install modelscope>=1.9.2



模型下载与链接



Ziya2-13B-Base

模型链接:

https://modelscope.cn/models/Fengshenbang/Ziya2-13B-Base/summary

模型weights下载:

from modelscope import snapshot_download
model_dir = snapshot_download('Fengshenbang/Ziya2-13B-Base', revision = 'master')


Ziya2-13B-Chat

模型链接:

https://modelscope.cn/models/Fengshenbang/Ziya2-13B-Chat/summary

模型weights下载:

from modelscope import snapshot_download
model_dir = snapshot_download('Fengshenbang/Ziya2-13B-Chat', revision='master')



模型推理


姜子牙2-13B-Base 推理代码:

from modelscope import AutoTokenizer
from modelscope import AutoModelForCausalLM
import torch
query="问题:我国的三皇五帝分别指的是谁?答案:"
model = AutoModelForCausalLM.from_pretrained('Fengshenbang/Ziya2-13B-Base', revision='master', torch_dtype=torch.float16, device_map="auto").eval()
tokenizer = AutoTokenizer.from_pretrained('Fengshenbang/Ziya2-13B-Base', revision='master')
input_ids = tokenizer(query, return_tensors="pt").input_ids.to('cuda:0')
generate_ids = model.generate(
            input_ids,
            max_new_tokens=512, 
            do_sample = True, 
            top_p = 0.9)
output = tokenizer.batch_decode(generate_ids)[0]
print(output)


姜子牙2-13B-Chat 推理代码:

from modelscope import AutoTokenizer, AutoModelForCausalLM, snapshot_download
import torch
device = torch.device("cuda")
messages = [{"role": "user", "content": "手机如果贴膜贴了一张防指纹的钢化膜,那屏幕指纹解锁还有效吗?"}]
user_prefix = "<human>:"
assistant_prefix = "<bot>:"
separator = "\n"
prompt = []
for item in messages:
    prefix = user_prefix if item["role"] == "user" else assistant_prefix
    prompt.append(f"{prefix}{item['content']}")
prompt.append(assistant_prefix)
prompt = separator.join(prompt)
model_dir = snapshot_download('Fengshenbang/Ziya2-13B-Chat', revision='master')
model = AutoModelForCausalLM.from_pretrained(model_dir,torch_dtype=torch.bfloat16).to(device)
tokenizer = AutoTokenizer.from_pretrained(model_dir, use_fast=False)
input_ids = tokenizer(prompt, return_tensors="pt").input_ids.to(device)
generate_ids = model.generate(
            input_ids,
            max_new_tokens=512, 
            do_sample = True, 
            top_p = 0.9, 
            temperature = 0.85, 
            repetition_penalty=1.05, 
            eos_token_id=tokenizer.encode("</s>"), 
            )
output = tokenizer.batch_decode(generate_ids)[0]
print(output)


05

模型微调和微调后推理


微调代码开源地址:

https://github.com/modelscope/swift/tree/main/examples/pytorch/llm

clone swift仓库并安装环境

git clone https://github.com/modelscope/swift.git
cd swift
pip install .
cd examples/pytorch/llm
pip install -r requirements.txt -U


QLoRA微调Ziya2-13B-Chat

微调数据集:

https://modelscope.cn/datasets/AI-ModelScope/lawyer_llama_data/summary


QLoRA+DDP+DeepSpeed版本的sft.sh

# Experimental environment: 2 * A10
# 2 * 13GB GPU memory
nproc_per_node=2
PYTHONPATH=../../.. \
CUDA_VISIBLE_DEVICES=0,1 \
torchrun \
    --nproc_per_node=$nproc_per_node \
    --master_port 29500 \
    src/llm_sft.py \
    --model_type ziya2-13b-chat \
    --sft_type lora \
    --template_type ziya \
    --dtype bf16 \
    --output_dir output \
    --ddp_backend nccl \
    --dataset lawyer-llama-zh \
    --train_dataset_sample -1 \
    --num_train_epochs 1 \
    --max_length 2048 \
    --quantization_bit 4 \
    --bnb_4bit_comp_dtype bf16 \
    --lora_rank 8 \
    --lora_alpha 32 \
    --lora_dropout_p 0. \
    --lora_target_modules ALL \
    --gradient_checkpointing true \
    --batch_size 1 \
    --weight_decay 0. \
    --learning_rate 1e-4 \
    --gradient_accumulation_steps $(expr 16 / $nproc_per_node) \
    --max_grad_norm 0.5 \
    --warmup_ratio 0.03 \
    --eval_steps 100 \
    --save_steps 100 \
    --save_total_limit 2 \
    --logging_steps 10 \
    --push_to_hub false \
    --hub_model_id ziya2-13b-chat-qlora \
    --hub_private_repo true \
    --hub_token 'your-sdk-token' \
    --deepspeed_config_path 'ds_config/zero2.json' \
    --only_save_model true \


QLoRA版本的sft.sh

# Experimental environment: A10
# 12GB GPU memory
PYTHONPATH=../../.. \
CUDA_VISIBLE_DEVICES=0 \
python src/llm_sft.py \
    --model_type ziya2-13b-chat \
    --sft_type lora \
    --template_type ziya \
    --dtype bf16 \
    --output_dir output \
    --dataset lawyer-llama-zh \
    --train_dataset_sample -1 \
    --num_train_epochs 1 \
    --max_length 2048 \
    --quantization_bit 4 \
    --bnb_4bit_comp_dtype bf16 \
    --lora_rank 8 \
    --lora_alpha 32 \
    --lora_dropout_p 0. \
    --lora_target_modules ALL \
    --gradient_checkpointing true \
    --batch_size 1 \
    --weight_decay 0. \
    --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 \
    --push_to_hub false \
    --hub_model_id ziya2-13b-chat-qlora \
    --hub_private_repo true \
    --hub_token 'your-sdk-token' \


模型微调后的推理脚本infer.sh

# Experimental environment: A10
# If you want to merge LoRA weight and save it, you need to set `--merge_lora_and_save true`.
PYTHONPATH=../../.. \
CUDA_VISIBLE_DEVICES=0 \
python src/llm_infer.py \
    --model_type ziya2-13b-chat \
    --sft_type lora \
    --template_type ziya \
    --dtype bf16 \
    --ckpt_dir "output/ziya2-13b-chat/vx_xxx/checkpoint-xxx" \
    --eval_human false \
    --dataset lawyer-llama-zh \
    --max_length 2048 \
    --quantization_bit 4 \
    --bnb_4bit_comp_dtype bf16 \
    --max_new_tokens 2048 \
    --temperature 0.9 \
    --top_k 20 \
    --top_p 0.9 \
    --do_sample true \
    --merge_lora_and_save false \


微调的可视化结果

以下损失图由QLoRA+DDP+DeepSpeed版本的sft.sh生成

训练损失:


评估损失:


资源消耗:

ziya2-13B-Chat使用 qlora+ddp+deepspeed 的方式训练的显存占用如下,大约在2*13G.


ziya2-13B-Chat使用 qlora 的方式训练的显存占用如下,大约在12G.




创空间

创空间体验链接:https://modelscope.cn/studios/Fengshenbang/Ziya2_13B_chat/summary




子牙系列大模型将在2023云栖大会全面来Show

首席科学家面对面talk分享 / 现场动手体验子牙系列大模型 /...

2023.10.31-11.02 杭州 · 云栖小镇 门票有限 快来申领


相关文章
|
1月前
|
Java 开发工具 Maven
IntelliJ IDEA安装教程(超详细)
IntelliJ IDEA安装教程(超详细)
152 1
|
1月前
|
IDE Java 数据库连接
IntelliJ IDEA安装使用教程——社区免费版——附中文插件安装
IntelliJ IDEA安装使用教程——社区免费版——附中文插件安装
443 0
|
1月前
|
Java 程序员 API
Springboot-swagger配置(idea社区版2023.1.4+apache-maven-3.9.3-bin)
Springboot-swagger配置(idea社区版2023.1.4+apache-maven-3.9.3-bin)
92 1
|
1月前
|
前端开发 Java 数据库连接
Springboot-MyBatis配置-配置端口号与服务路径(idea社区版2023.1.4+apache-maven-3.9.3-bin)
Springboot-MyBatis配置-配置端口号与服务路径(idea社区版2023.1.4+apache-maven-3.9.3-bin)
38 0
|
1月前
|
Java 应用服务中间件 Maven
idea配置本地maven保姆级教程
idea配置本地maven保姆级教程
490 0
|
1月前
|
Java Maven Spring
【操作宝典】IntelliJ IDEA新建maven项目详细教程
【操作宝典】IntelliJ IDEA新建maven项目详细教程
71 1
|
1月前
|
IDE Java 开发工具
idea一步一步安装教程
idea一步一步安装教程
|
24天前
|
IDE Java 编译器
07. 【Java教程】Java 集成开发环境 - IntelliJ IDEA
07. 【Java教程】Java 集成开发环境 - IntelliJ IDEA
23 1
|
1月前
|
存储 IDE Java
IntelliJ IDEA 安装及配置详细教程
IntelliJ IDEA 安装及配置详细教程
278 0
|
1月前
最新idea激活码附赠激活教程
最新idea激活码附赠激活教程
192 1