用 LLaMA-Factory 在魔搭微调千问

本文讲述了作者在魔搭平台上使用Qwen模型进行对话生成的过程,包括从预训练模型到调优、训练,以及在GPU环境下运行的实际操作。作者还提到了LLaMA-Factory工具的使用和模型优化的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在魔搭上把千问调优跑通了,训练模型现在在 Mac 还不支持,需要用 N 卡才可以,只能弄个N 卡的机器,或者买个云服务器。魔搭可以用几十个小时,但是不太稳定,有的时候会自动停止。

注册账号

直接手机号注册就可以.

找到对应模型

这步可能不需要,随便一个模型,只要启动了 GPU 环境就可以,如果手里有代码,直接启动环境即可。进入模型说明页,通常会有一个测试代码把代码放到 notebook 直接运行接就可以看到结果。我用了Qwen一个最小的模型 0.5B,代码和运行结果如下:

from modelscope import AutoModelForCausalLM, AutoTokenizer
device = "cuda" # the device to load the model onto

model = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen1.5-0.5B-Chat",
    torch_dtype="auto",
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen1.5-0.5B-Chat")

prompt = "你好,什么是 Java?"
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]
print(response)

在这里插入图片描述

调优

调优模型需要几步,首先,需要准备数据,我这里就是测试一下,所以就直接用了 LLama Factory 的例子。然后,配置命令行参数进行模型训练。

  1. 安装LLaMA Factory, 通过 notebook 打开安装
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -r requirements.txt
pip install modelscope -U
  1. 运行训练命令
    –model_name_or_path 模型名称要写对
    –dataset 训练数据集名称要写对,这个名称是在/data/dataset_info.json进行配置,直接搜索 example 就可以看到
    训练很快,因为训练数据就两条,就是测试一下。
CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \
    --stage sft \
    --do_train \
    --model_name_or_path Qwen/Qwen1.5-0.5B-Chat \  
    --dataset example \
    --template qwen \
    --finetuning_type lora \
    --lora_target q_proj,v_proj \
    --output_dir  output\
    --overwrite_cache \
    --overwrite_output_dir true \
    --per_device_train_batch_size 2 \
    --gradient_accumulation_steps 32 \
    --lr_scheduler_type cosine \
    --logging_steps 10 \
    --save_steps 1000 \
    --learning_rate 5e-5 \
    --num_train_epochs 3.0 \
    --plot_loss \
    --fp16

  1. 合并训练好的模型
    –export_dir Qwen1.5-0.5B-Chat_fine 导出的位置要写对
CUDA_VISIBLE_DEVICES=0 python src/export_model.py \
    --model_name_or_path Qwen/Qwen1.5-0.5B-Chat\
    --adapter_name_or_path output \
    --template qwen \
    --finetuning_type lora \
    --export_dir Qwen1.5-0.5B-Chat_fine \
    --export_size 2 \
    --export_legacy_format False
  1. 运行模型
    模型位置要写对,否则会报错。
from modelscope import AutoModelForCausalLM, AutoTokenizer
device = "cuda" # the device to load the model onto

model = AutoModelForCausalLM.from_pretrained(
    "/mnt/workspace/LLaMA-Factory/Qwen1.5-0.5B-Chat_fine",
    torch_dtype="auto",
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("/mnt/workspace/LLaMA-Factory/Qwen1.5-0.5B-Chat_fine")

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)

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)

现在各种开源框架很多,训练起来不复杂,但是如果想训练一个可用的生产模型,还是要花一些时间的,可以比较一下训练前和训练后,模型对纽约天气的回答,大概率出现幻觉。

### 使用 Llama-Factory 部署和微调 Qwen 模型 #### 下载模型 为了使用 `Qwen2` 进行微调,首先需要下载预训练的基础模型。如果无法通过 Hugging Face 获取,则可以考虑从国内的塔社区获取该模型,这不会受到速度限制。 ```python from modelscope import snapshot_download model_dir = snapshot_download('qwen/Qwen2-0.5B', cache_dir="model/Qwen") ``` 此代码片段展示了如何利用 ModelScope 库来下载指定版本的 `Qwen2-0.5B` 模型并保存到本地目录中[^2]。 #### 准备数据集 对于任何机器学习项目来说,准备好适当的数据集都是至关重要的一步。虽然具体细节未在此提及,但是通常涉及收集、清理以及格式化适合用于训练的数据文件。这些工作完成后,应该确保数据能够被顺利读入到后续处理流程当中。 #### 微调配置与执行 一旦拥有了基础模型和所需的数据之后,就可以着手于实际的微调过程了。下面是一条命令行指令的例子,用来启动基于 LLaMA Factory 工具链下的参数高效微调(LoRA): ```bash CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 llamafactory-cli train /path/to/config_file.yaml ``` 这条命令指定了要使用的 GPU 设备编号,并且调用了 `llamafactory-cli` 脚本来运行具体的训练任务。其中 `/path/to/config_file.yaml` 表示指向包含有所有必要设置项的一个 YAML 文件路径位置[^3]。 #### 关键要点总结 - **环境建**:确认已安装好 Python 环境及相关依赖包; - **资源准备**:成功获取目标大语言模型及其配套脚本工具; - **硬件支持**:根据实际情况调整参与计算工作的显卡数量; - **软件接口**:熟悉掌握所选框架所提供的 API 或 CLI 接口操作方式; 通过上述步骤即可完成对 Qwen 模型的一次典型 LoRA 方式的自定义优化尝试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值