前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在腾讯云云服务器上推理及微调Qwen2-7B大语言模型

在腾讯云云服务器上推理及微调Qwen2-7B大语言模型

原创
作者头像
buzzfrog
修改2024-07-22 15:44:07
1.3K1
修改2024-07-22 15:44:07
举报
文章被收录于专栏:云上修行

随着人工智能技术的迅速发展,大型预训练模型(LLMs)在各种语言、代码及数学问题解决方面展现出了巨大潜力。Qwen2系列模型的推出无疑为自然语言处理(NLP)和多语言理解带来了新的飞跃。今天,我们将深入探讨如何在腾讯云云服务器上部署和微调2024年6月推出的大型语言模型Qwen2中的Qwen2-7B,探索其强大的代码和数学能力、出色的多语言处理能力,加速您的AI项目进程。

什么是Qwen2-7B模型?

Qwen2系列模型以其先进的预训练技术和广泛的语言支持,为NLP领域的应用开启了新的可能性。特别是Qwen2-7B,凭借其7.07亿参数、优化的GQA机制、更长的上下文长度支持(达到128K tokens),以及在27种语言上表现的卓越能力,成为了当前最值得关注的大型语言模型之一。

购买腾讯云服务器

我在腾讯云CVM中购买了一台GPU计算型GN10X的服务器,其显存有32GB。详细配置见以上截图。

注意,在购买时,我选择了后台自动安装GPU驱动。第一次登录时,有较长时间的等待驱动、CUDA、CUDNN的安装过程。见下图。

可以通过 ssh ubuntu@{腾讯云CVM云服务器外网IP地址} 登录到腾讯云CVM云服务器中。

安装必要的依赖

通过apt安装相关依赖

代码语言:bash
复制
sudo apt update
sudo apt install curl
sudo apt install python3-pip

通过pip安装相关依赖

代码语言:bash
复制
pip install transformers -U
pip install modelscope
pip install vllm
pip install accelerate
pip install jinja2 -U
pip install jsonschema -U

下载Qwen2-7B模型

在~/Workspace目录下,创建一个文件qwen2.py,粘贴如下内容到此文件中。

代码语言:python
代码运行次数:0
复制
from transformers import AutoModelForCausalLM, AutoTokenizer


device = "cuda" # the device to load the model onto

# Now you do not need to add "trust_remote_code=True"
model = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen2-7B-Instruct",
    torch_dtype="auto",
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-7B-Instruct")

# Instead of using model.chat(), we directly use model.generate()
# But you need to use tokenizer.apply_chat_template() to format your inputs as shown below
prompt = "Give me a short introduction to large language model."
prompt = "上海天气怎么样?"
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)

# Directly use generate() and tokenizer.decode() to get the output.
# Use `max_new_tokens` to control the maximum output length.
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]

print("response======>", str(response))

如果是在国内的服务器,建议第一行改为from modelscope import AutoModelForCausalLM, AutoTokenizer 。本文下述都是依赖于transformers而非modelscope,但流程基本类似。

执行此python3脚本文件,python3 qwen2.py。它会将依赖的模型下载到/home/ubuntu/.cache/huggingface/hub/models--Qwen--Qwen2-7B-Instruct中。如果希望更换缓存地址,可以使用:

代码语言:python
代码运行次数:0
复制
import os
# 设置 Transformers / Modelscope 的缓存目录
os.environ["HF_HOME"] = "/home/ubuntu/.cache/huggingface"
os.environ["MODELSCOPE_CACHE"] = "/home/ubuntu/.cache/modelscope"
# os.environ["TRANSFORMERS_CACHE"] = "/home/ubuntu/.cache/huggingface"

两次执行的结果略有不同。

使用vllm进行模型推理

在腾讯云云服务器的命令行中,通过以下命令,即可启动模型推理。

代码语言:bash
复制
python3 -m vllm.entrypoints.openai.api_server --model /home/ubuntu/.cache/huggingface/hub/models--Qwen--Qwen2-7B-Instruct/snapshots/41c66b0be1c3081f13defc6bdf946c2ef240d6a6 --dtype=half

这样启动的模型占用显存大概24GB。

下载微调依赖

代码语言:bash
复制
pip install deepspeed
pip install llamafactory
pip install click -U

微调Demo

这里使用llamafactory来微调Qwen2-7B,使用如下命令来启动webui。

代码语言:bash
复制
llamafactory-cli webui

启动后,在本地浏览器使用 http://{腾讯云云服务器外网IP地址}:7860 来进入webui。注意,需要在腾讯云云服务器的 安全组-入站规则 中添加 TCP:7860 端口可入。

登录成功后,整体界面如下所示(我已经通过语言-zh切换到中文界面)。

这里我使用identity.json来做demo。这个示例,主要是用来训练模型对自我的名字以及作者的认知。

由于我的LLaMA-Factory源码安装在这个路径: /home/ubuntu/Workspace/LLaMA-Factory 。则在中文界面的配置如下所示:

点击【开始】按钮进行训练。

训练完成后,会显示“训练完毕。”。如下图所示。

训练好的模型在/home/ubuntu/Workspace/saves/Qwen2-7B/lora/train_2024-07-02-19-41-39中。见下图。

模型测试

接下来进行模型测试。

这里的训练后的模型的名字和作者分别是{{name}}和{{author}},有两种处理方式,一种是训练前更新identity.json中的{{name}}和{{author}}。另外一种是接口调用时replace输出内容中的{{name}}和{{author}}。第二种方式更灵活一些,因此这里未对identity.json做预处理。

点击卸载模型将模型给卸载了。避免显存的持久占用。

模型合并

最后就是模型合并,因为如果每次交付模型,都有基础模型和lora模型,就过于繁琐。所以这里合并一下两者。

点击“开始导出”。

模型导出成功后,会显示“模型导出完成。”

导出后的模型内容如下图所示。

总结

Qwen2-7B模型在处理多语言、长文本以及复杂问题解决方面展现出的能力,使其成为了研究和工业界的有力工具。通过腾讯云云服务器的高性能计算资源,我们能够充分挖掘Qwen2-7B模型的潜力,进一步推动多语言理解和AI技术的发展。

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Qwen2-7B模型?
  • 购买腾讯云服务器
  • 安装必要的依赖
  • 下载Qwen2-7B模型
  • 使用vllm进行模型推理
  • 下载微调依赖
  • 微调Demo
  • 模型测试
  • 模型合并
  • 总结
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档