基于开发机进行模型训练

简介

本次模型训练以 Deepseek-LLM 为微调示例,使用 4090 单卡进行测试。github代码链接ebtech-ebcloud/examplesopen in new window

微调实例实际操作时间约 1~2 个小时,租用256G共享存储和单卡4090即可,总消耗 5~10元,首次注册英博云账号会赠送50元代金券,本实例能让您免费体验大语言模型训练的乐趣!

准备开发机

英博云基于K8S Native架构提供智算服务,算力、存储、网络均以K8S集群作为载体。在使用英博云服务前,用户需先完成以下准备工作:

  • 创建专属 Kubernetes 集群

  • 在集群中配置共享存储卷

  • 创建开发机

详细步骤请参考:快速开始

下载代码

git clone https://github.com/ebtech-ebcloud/examples.git
cd examples

安装依赖

在项目根目录执行以下命令安装依赖:

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

说明:当前默认镜像仅包含 PyTorch 2.5.1,若提示 PyTorch 版本过低,执行以下命令升级 PyTorch

pip install --upgrade torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 -i https://pypi.tuna.tsinghua.edu.cn/simple

模型训练

英博云提供的开发机可直接访问平台已保存的公共模型与数据集资源。 通过开发机挂载路径 /public 获取微调训练的公共模型与数据集,具体路径如下:

预训练模型:/public/huggingface-models/deepseek-ai/deepseek-llm-7b-chat/

训练数据集:/public/github/EmoLLM/

运行 run_train.sh 进行训练

bash ./run_train.sh

训练过程可通过 Swanlab 进行可视化监控。

如果没有Swanlab账号,请先进行注册

训练完成后,需要将微调得到的模型权重与原始预训练模型进行合并,以便后续推理或部署。

python modeladd.py \
  --base_model /public/huggingface-models/deepseek-ai/deepseek-llm-7b-chat \
  --adapter_model /data/output/deepseek-7b-lora \
  --save_path /data/output/deepseek-sft-merged

模型推理

启动服务

python chat_api.py

默认服务监听端口为 8000。如需修改端口,可通过参数指定,例:--port 8080

开发机使用 curl 调用聊天接口示例:

curl -X POST "http://127.0.0.1:8000/chat" \
     -H "Content-Type: application/json" \
     -d '{"text": "你好"}'

调用时需使用启动服务时指定的端口

本实例支持多轮对话,每次请求会自动保留上下文信息,实现连续交互。

如需重新开始新的对话,可调用 /reset 接口清空历史记录

curl -X POST "http://127.0.0.1:8000/reset"

本机部署

在本机 CMD 或 PowerShell 中执行以下命令,通过 SSH 隧道访问开发机上的服务:

ssh -p 3xxxx -L 8000:127.0.0.1:8000 root@ssh-cn-huabei1.ebcloud.com

-p 是登录服务器用的端口,在开发机远程连接的地方获得端口号和密码(端口密码复制到本地即可显现)

-L 把本地的 8000 端口转发到远端的 127.0.0.1:8000(FastAPI 服务),这个端口和启动服务的端口保持一致即可

输入密码并等待连接成功后,即可通过本地访问开发机服务。

连接成功后,有两种方式调用服务接口:

  • 本机直接使用 curl 命令调用接口,输入指令与开发机调用接口一致

  • 使用 FastAPI 网页接口调用 -> 打开浏览器访问 http://127.0.0.1:8000/docs

浏览器页面示例: 这是一张图片

点击第一个 POST /chat,在点击展开的 Try It out这是一张图片

text 中填入文本进行对话。 这是一张图片