使用K8S部署llama factory进行模型训练
  

新手703537 1601人觉得有帮助

{{ttag.title}}
本帖最后由 新手703537 于 2026-6-28 20:59 编辑

一、简介
1.1工具说明
LLaMA Factory是开源一站式大模型微调训练框架,北航团队开发GitHub 高星项目,主打低门槛、全兼容、轻量化微调,普通人用消费级显卡就能定制专属大模型,统一封装百余种主流大模型的训练、微调、推理流程,不用手写复杂训练脚本,提供网页可视化 UI(LlamaBoard)+ 命令行两种操作方式,小白零代码即可完成微调,专业开发者支持批量实验与集群训练LLaMA Factory。
1.2文档说明
Llama factory官方支持命令行一键安装,这里使用k8s演示是为了契合深信服AICP平台环境,AICP中的SKE平台支持使用k8s标准的yaml文件部署工作负载,在测试项目需要训练模型的场景下,部署该平台可以作为对AICP模型训练能力的一个补充,同时也不会对AICP宿主机造成任何影响。文档演示了在k8s环境部署llama factory,并正常调用宿主机显卡进行模型训练的过程。
二、环境介绍
2.1软硬件资源
物理主机:6C32G | RTX3060 12G
软件版本:Ubuntu24.04 | k8s1.36.0 | NVIDIA-SMI595.71.05 | CUDA Version: 13.2
2.2预置条件
(1)针对全新搭建的k8s环境,宿主机需要先安装好NVIDIA官方驱动,使用nvidia-smi命令就可以看到驱动版本和CUDA版本;
(2)安装nvidia-container-toolkit 工具包,给K8s的containerd容器引擎注入 NVIDIA GPU运行时配置;
(3)使用runtimeclass-nvidia.yaml配置nvidia运行时,使用nvidia-device-plugin.yaml声明显卡资源,样例配置文件如下:
#-------------------nvidia-device-plugin-------------------
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: nvidia-device-plugin-daemonset
  namespace: kube-system
spec:
  selector:
    matchLabels:
      name: nvidia-device-plugin-ds
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        name: nvidia-device-plugin-ds
    spec:
      tolerations:
      - key: nvidia.com/gpu
        operator: Exists
        effect: NoSchedule
            priorityClassName: "system-node-critical"
      containers:
      - image: nvcr.io/nvidia/k8s-device-plugin:v0.18.0
        name: nvidia-device-plugin-ctr
        env: []
        securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            drop: ["ALL"]
        volumeMounts:
        - name: kubelet-device-plugins-dir
          mountPath: /var/lib/kubelet/device-plugins
      volumes:
      - name: kubelet-device-plugins-dir
        hostPath:
          path: /var/lib/kubelet/device-plugins
          type: Directory
#-------------------runtimeclass-nvidia-------------------
apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
  name: nvidia
handler: nvidia
(4)llama factory镜像有15g,在线拉取成功率不高,可以提前下载后进行导入
网盘链接如下: https://pan.quark.cn/s/160cab24994b?pwd=ez2m,提取码:ez2m。
三、部署过程
3.1数据持久化
为了避免由于pod启停或重建造成模型文件与训练数据丢失,这里使用本地存储创建pvc,后续挂载给pod使用;如果是在ske中,可以安装CSI插件后对接NFS\aSAN\EDS以提供持久卷功能。
创建本地目录,用于保存模型文件以及训练数据
mkdir -p /data/models /data/app/saves
创建SC
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: Immediate
reclaimPolicy: Retain
创建PV,注意这里面values:["需要替换为实际节点NAME"],可以用kubectlget nodes查看
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-model-50g
spec:
capacity:
   storage: 50Gi
accessModes:
    -ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-storage
local:
   path: /data/models
nodeAffinity:
   required:
     nodeSelectorTerms:
     - matchExpressions:
       - key: kubernetes.io/hostname
         operator: In
         values: ["clear-system-product-name"]
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-save-50g
spec:
capacity:
   storage: 50Gi
  accessModes:
    -ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-storage
local:
   path: /data/app/saves
nodeAffinity:
   required:
     nodeSelectorTerms:
     - matchExpressions:
       - key: kubernetes.io/hostname
         operator: In
         values: ["clear-system-product-name"]
创建PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: llamafactory-model-pvc
spec:
storageClassName: local-storage
accessModes:
    -ReadWriteOnce
resources:
   requests:
     storage: 50Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: llamafactory-save-pvc
spec:
storageClassName: local-storage
accessModes:
    -ReadWriteOnce
resources:
   requests:
     storage: 50Gi
依次生效配置文件
kubectl apply -f local-storage-class.yaml
kubectl apply -f local-storage-pv.yaml
kubectl apply -f local-storage-pvc.yaml
3.2启动服务
将提前下载好的llama factory镜像文件上传到服务器本地,使用命令进行导入
ctr -n k8s.io image import llama_factory_0.9.6.tar,使用nodeport方式将镜像内7860端口映射至节点的30860端口,用于访问web界面。
创建pod并发布web端口
# -------------------------- LlamaFactory Deployment----------------------
apiVersion: apps/v1
kind: Deployment
metadata:
  name: llamafactory-web-12g
spec:
  replicas: 1
  selector:
    matchLabels:
      app: llamafactory-12g
  template:
    metadata:
      labels:
        app: llamafactory-12g
    spec:
      hostIPC: true
      runtimeClassName: nvidia
      volumes:
        - name: model-storage
         persistentVolumeClaim:
            claimName:llamafactory-model-pvc
        - name: save-storage
         persistentVolumeClaim:
            claimName:llamafactory-save-pvc
      containers:
      - name: llamafactory
        image:hiyouga/llamafactory:latest
        imagePullPolicy:IfNotPresent
        command:["sh", "-c"]
        args:
          - |
            pip installbitsandbytes>=0.37.0
            llamafactory-cliwebui
        ports:
        - containerPort: 7860
        volumeMounts:
          - name:model-storage
            mountPath: /models
          - name: save-storage
            mountPath:/app/saves
        resources:
          limits:
            nvidia.com/gpu: 1
            memory:"10Gi"
            cpu: "6"
          requests:
            nvidia.com/gpu: 1
            memory:"8Gi"
            cpu: "3"
        stdin: true
        tty: true
---
# -------------------------- 服务暴露--------------------------
apiVersion: v1
kind: Service
metadata:
  name: llamafactory-svc-12g
spec:
  selector:
    app: llamafactory-12g
  type: NodePort
  ports:
  - port: 7860
    targetPort: 7860
nodePort: 30860
生效配置文件
kubectl apply -f llamafactory.yaml
3.3检查运行状态
使用命令查看PV PVC生效情况,正常看到Bound状态即可
kubectl get pv,pvc
使用命令查看pod状态,正常看到Running状态即可
kubectl get pods
在浏览器打开http://[节点IP]:30860,可以正常打开页面即可
四、平台使用
4.1模型获取与上传
在首页点击【模型名称】可以搜索需要的模型,国内模型下载源选择【modelscope】;使用这种方式自动下载,模型保存目录是pod内:/root/.cache/modelscope/hub/models。
在使用pvc的情况下可以使用工具手动下载模型文件后,上传到物理机/data/models目录,使用社区的工具就可以很方便的进行下载:模型下载工具-AICP算力平台-深信服技术支持
4.2模型对话与训练
在准备好模型文件后,可以先加载模型进行对话测试,用于判断模型文件是否可以正常识别,显卡资源是否可以正常调用;页面上选择【Chat】菜单,点击【加载模型】。
加载完成后在页面下方发送对话内容后模型可以正常进行回复,同时可以看到显卡显存已经有了占用,那下一步就可以进行训练了,训练前记得点击【卸载模型】。
训练需要在页面上选择【Trian】菜单,默认使用SFT的训练方式,训练所需数据集需要用户提供,平台内置的样例数据可以验证训练过程是否正常;页面上其余配置选项都需要依据客户实际需求进行调整。
在配置完训练参数后在页面下方点击开始。
开始训练后,页面会开始刷新训练日志,设备显存占用也有明显提升。
也可以在宿主机使用nvidia-smi查看显卡使用情况。
完成当前的训练任务后,在宿主机目录下可以查看训练日志与检查点保存情况:/data/app/saves,页面【检查点路径】处则可以选取对应检查点,以便进行后续的训练操作。
五、小结
1、本文档主要是为了记录自己完成实践的过程,顺便希望给大家在解决类似需求时提供一些启发;
2、文档中如果发现任何问题,请及时联系,我会加以修正;
3、后续会在AICP测试环境跑通以上流程,敬请期待。

511886a4119585dc2c.png (77.21 KB, 下载次数: 6)

511886a4119585dc2c.png

719866a4119b172ed4.png (236.34 KB, 下载次数: 6)

719866a4119b172ed4.png

打赏鼓励作者,期待更多好文!

打赏
暂无人打赏

发表新帖
热门标签
全部标签>
每日一问
信服课堂视频
纪元平台
功能体验
新版本体验
高手请过招
标准化排查
GIF动图学习
测试报告
秒懂零信任
技术盲盒
排障那些事
西北区每日一问
2025年技术争霸赛
有一说一
产品连连看
畅聊IT
答题自测
专家问答
技术笔记
技术圆桌
在线直播
MVP
网络基础知识
安装部署配置
升级
安全攻防
上网策略
日志审计
问题分析处理
流量管理
每日一记
运维工具
用户认证
原创分享
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
排障笔记本
产品预警公告
玩转零信任
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
2023技术争霸赛专题
卧龙计划
华北区拉练
天逸直播
以战代练
技术晨报
平台使用
山东区技术晨报
文档捉虫
齐鲁TV
华北区交付直播
每周精选
2024年技术争霸赛
北京区每日一练
场景专题
故障笔记
升级&主动服务
高频问题集锦
社区新周刊
【 社区to talk】
POC测试案例
全能先锋系列
安全效果
云化安全能力
专家说
热门活动
产品动态
行业实践
产品解析
关键解决方案
声音值千金
工具体验官
产品知识周周练
产品体验官
VMware替换
知识王者峡谷

本版版主

8
12
2

发帖

粉丝

关注

2
7
0

发帖

粉丝

关注

0
3
0

发帖

粉丝

关注

36
18
1

发帖

粉丝

关注

1
1
0

发帖

粉丝

关注

本版达人