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

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
模型训练 PAI-DLC,100CU*H 3个月
交互式建模 PAI-DSW,每月250计算时 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 杭州 · 云栖小镇 门票有限 快来申领


相关文章
|
7月前
|
Java 开发工具 Maven
IntelliJ IDEA安装教程(超详细)
IntelliJ IDEA安装教程(超详细)
319 1
|
7月前
|
IDE Java 数据库连接
IntelliJ IDEA安装使用教程——社区免费版——附中文插件安装
IntelliJ IDEA安装使用教程——社区免费版——附中文插件安装
1188 0
|
7月前
|
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)
186 1
|
7月前
|
前端开发 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)
86 0
|
2月前
|
IDE Java 程序员
学生邮箱白嫖/免费安装JetBrains全家桶(IDEA/pycharm等) —— 保姆级教程
本文提供了如何使用学生邮箱免费获取并安装JetBrains全家桶(包括IDEA、PyCharm等)的详细教程,涵盖了学生认证、软件下载、安装及常见问题的解决方法。
542 0
学生邮箱白嫖/免费安装JetBrains全家桶(IDEA/pycharm等) —— 保姆级教程
|
4月前
|
Java Maven
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
这篇文章是一份关于Maven的安装和配置指南,包括下载、环境变量设置、配置文件修改、IDEA集成Maven以及解决jar包下载问题的方法。
2022最新版超详细的Maven下载配置教程、IDEA中集成maven(包含图解过程)、以及导入项目时jar包下载不成功的问题解决
|
2月前
|
应用服务中间件 Windows
震惊!idea 2021 社区版手把手安装,超详细过程,新手一看就会 如何安装低版本的IDEA? IDEA安装过程中版本冲突怎么办 idea最新版安装!
本文提供了一个详细的指南,用于安装2021年社区版的IntelliJ IDEA,包括如何处理版本冲突和完成安装过程。
405 2
震惊!idea 2021 社区版手把手安装,超详细过程,新手一看就会 如何安装低版本的IDEA? IDEA安装过程中版本冲突怎么办 idea最新版安装!
|
2月前
|
Java Maven Spring
springboot学习一:idea社区版本创建springboot项目的三种方式(第三种为主)
这篇文章介绍了在IntelliJ IDEA社区版中创建Spring Boot项目的三种方法,特别强调了第三种方法的详细步骤。
1024 0
springboot学习一:idea社区版本创建springboot项目的三种方式(第三种为主)
|
2月前
|
Java
IDEA的fxml打开Scene Builder后空白! Scene Builder下载依赖后还是空白不显示 无论如何都不显示,网上的教程试过来了遍还是不显示
本文提供了三种方法来解决IDEA中fxml文件在Scene Builder中打开后显示空白的问题:检查JavaFX是否安装、切换IDEA版本、下载Scene Builder插件。
265 1
|
7月前
|
Java Maven Spring
【操作宝典】IntelliJ IDEA新建maven项目详细教程
【操作宝典】IntelliJ IDEA新建maven项目详细教程
391 1

热门文章

最新文章