魔搭社区通义千问110B模型推理、微调最佳实践

news/2024/10/21 9:28:19/

模型体验

体验链接:

https://modelscope.cn/studios/qwen/Qwen1.5-110B-Chat-demo

为了便于大家比较,社区搭建了Llama3-70B-Instruct和Qwen1.5-110B-Chat的对比环境,体验链接:

https://www.modelscope.cn/studios/LLM-Research/Llama3-Qwen1.5-Arena

例如,多语言能力:

图片

小学数学so easy:

图片

再难一点也不在话下:

图片

逻辑能力:

图片

模型实战

模型下载

模型链接:

Qwen1.5-110B-Chat:

https://www.modelscope.cn/models/qwen/Qwen1.5-110B-Chat

Qwen1.5-110B:

https://www.modelscope.cn/models/qwen/Qwen1.5-110B

from modelscope import snapshot_download
model_dir = snapshot_download('qwen/Qwen1.5-110B-Chat')

模型推理

推理代码:

from modelscope import AutoModelForCausalLM, AutoTokenizer
device = "cuda" # the device to load the model ontomodel = AutoModelForCausalLM.from_pretrained("qwen/Qwen1.5-110B-Chat",torch_dtype="auto",device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("qwen/Qwen1.5-110B-Chat")prompt = "Give me a short introduction to large language model."
messages = [{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(messages,tokenize=False,add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(device)generated_ids = model.generate(model_inputs.input_ids,max_new_tokens=512
)
generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]

显存要求(4卡A100,230G显存):

模型训练

魔搭社区的微调框架SWIFT已经支持了Qwen1.5全系列模型的微调和推理。

下面我们以自我认知任务为例针对千问1.5-110b-chat模型为例给出训练参数配置:

nproc_per_node=4
CUDA_VISIBLE_DEVICES=0,1,2,3 \
NPROC_PER_NODE=$nproc_per_node \
swift sft \--model_type qwen1half-110b-chat \--sft_type lora \--tuner_backend peft \--dtype AUTO \--output_dir output \--ddp_backend nccl \--num_train_epochs 2 \--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.1 \--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 \--use_flash_attn true \--deepspeed default-zero3 \--self_cognition_sample 2000 \--model_name 小白 'Xiao Bai' \--model_author AI 疯人院 \

训练loss:

可以看到其收敛非常平滑。

训练的显存使用情况:

训练后推理可以使用如下脚本(注意将--ckpt_dir替换为训练log输出的weights路径):


# Experimental environment: 4*A100
CUDA_VISIBLE_DEVICES=0,1,2,3 \
swift infer \--ckpt_dir "/output/qwen1half-110b-chat/vx-xxx/checkpoint-xx" \--load_dataset_config true \--max_length 2048 \--eval_human true \--use_flash_attn false \--max_new_tokens 2048 \--temperature 0.1 \--top_p 0.7 \--repetition_penalty 1. \--do_sample true \--merge_lora_and_save false \

自我认知对话测试:

图片

通用对话测试:

图片

交流群进群方式--->关注公众号(AI疯人院) 输入框输入--->加群 或点击讨论交流


http://www.ppmy.cn/news/1455120.html

相关文章

linux的基础入门(2)

环境变量 在Shell中,正确的赋值语法是没有空格的,即变量名数值。所以,正确的方式是: tmpshy 这样就将变量tmp赋值为"shy"了。 注意:并不是任何形式的变量名都是可用的,变量名只能是英文字母、…

jmeter后置处理器提取到的参数因为换行符导致json解析错误

现象: {"message":"JSON parse error: Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash to be included in string value; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Ill…

干货收藏:知识库测评推荐

在知识经济时代,企业对于知识库的需求日益增长。一个高效、完善的知识库不仅可以提高员工的工作效率,还能促进团队协作,推动创新。本文将为您推荐五款搭建知识库的工具,并简要介绍它们的适用范围、优点和缺点。 一、HelpLook AI知…

上海计算机学会2021年4月月赛C++丙组T1巧妙的数

题目描述 如果一个十进制整数能够被它的每一个非零数码整除,则称它为巧妙的数,譬如 102 是一个巧妙的数,因为 102 能被 1 与 2 整除,而 2021 不是,因为它不能被 22整除。给定一个 n,请判定它是否为巧妙的数…

Python与C#之间的双向管道连接-发送数据

在Python中创建named pipe: import os import time pipe "\\\\.\\pipe\\my_pipe" try: os.mkfifo(pipe) except OSError: pass fifo open(pipe, wb) 在C#中创建named pipe: using System.IO.Pipes; string pipeName "my_pipe&…

二、Redis五种常用数据类型-String

1、用途 简单的K-V缓存计数器分布式锁session共享分布式ID生成(自增) 2、底层实现结构 Redis底层是c语言实现的,但是并没有使用c的string来表示字符串,而是使用自己的简单动态字符串的抽象类型(simple dynamic string,SDS)。 SDS结构: st…

ubuntu20.04通过minio配置FTP服务

项目需求:原来存储文件用的是oss服务存储的,本地minio服务。因为项目需求需要ftp服务来访问文件。查看了一下minio官网4.20版本以后的支持ftp服务。官网介绍如下: 参考文章地址如下:File Transfer Protocol (FTP/SFTP) — MinIO …

Loguru的说明书

本文是loguru的doc的阅读笔记,原文链接为:原文链接 loguru 是一个替代 Python logging 的第三方库:简单易用且功能强大。 Loguru 仅使用一个全局 logger 实例 在整个进程中,无需创建多个 logger 实例,而是使用一个预…