随着人工智能技术的迅速发展,大型预训练模型(LLMs)在各种语言、代码及数学问题解决方面展现出了巨大潜力。Qwen2系列模型的推出无疑为自然语言处理(NLP)和多语言理解带来了新的飞跃。今天,我们将深入探讨如何在腾讯云云服务器上部署和微调2024年6月推出的大型语言模型Qwen2中的Qwen2-7B,探索其强大的代码和数学能力、出色的多语言处理能力,加速您的AI项目进程。
Qwen2系列模型以其先进的预训练技术和广泛的语言支持,为NLP领域的应用开启了新的可能性。特别是Qwen2-7B,凭借其7.07亿参数、优化的GQA机制、更长的上下文长度支持(达到128K tokens),以及在27种语言上表现的卓越能力,成为了当前最值得关注的大型语言模型之一。
我在腾讯云CVM中购买了一台GPU计算型GN10X的服务器,其显存有32GB。详细配置见以上截图。
注意,在购买时,我选择了后台自动安装GPU驱动。第一次登录时,有较长时间的等待驱动、CUDA、CUDNN的安装过程。见下图。
可以通过 ssh ubuntu@{腾讯云CVM云服务器外网IP地址} 登录到腾讯云CVM云服务器中。
通过apt安装相关依赖
sudo apt update
sudo apt install curl
sudo apt install python3-pip
通过pip安装相关依赖
pip install transformers -U
pip install modelscope
pip install vllm
pip install accelerate
pip install jinja2 -U
pip install jsonschema -U
在~/Workspace目录下,创建一个文件qwen2.py,粘贴如下内容到此文件中。
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中。如果希望更换缓存地址,可以使用:
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"
两次执行的结果略有不同。
在腾讯云云服务器的命令行中,通过以下命令,即可启动模型推理。
python3 -m vllm.entrypoints.openai.api_server --model /home/ubuntu/.cache/huggingface/hub/models--Qwen--Qwen2-7B-Instruct/snapshots/41c66b0be1c3081f13defc6bdf946c2ef240d6a6 --dtype=half
这样启动的模型占用显存大概24GB。
pip install deepspeed
pip install llamafactory
pip install click -U
这里使用llamafactory来微调Qwen2-7B,使用如下命令来启动webui。
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技术的发展。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。