当前位置: 首页 > news >正文

LlamaFactory的docker-compose安装 - 教程

LlamaFactory的docker-compose安装

一.前置条件

本文主要是介绍以dokcer-compose的方式来安装 LlamaFactory。在安装LlamaFactory之前,我们需要先准备一下系统的安装环境。

本人电脑安装环境如下:

1.GPU: LlamaFactory对模型进行训练时,需要使用到GPU。本例中服务器安装了英伟达显卡,型号为:NVIDIA Corporation GP102GL [Tesla P40]24G。

2.操作系统:Ubuntu 22.04

3.docker版本:27.3.1

4. dokcer-compose版本:v2.29.7

二.LlamaFactory下载和安装

git clone --branch v0.9.3 https://github.com/hiyouga/LLaMA-Factory.git LLaMA-Factory-0.9.3

我们使用git工具将LlamaFactory的源码克隆到服务器上。本例中下载的是LlamaFactory0.9.3版的源码。

我们进入LLaMA-Factory-0.9.3目录后,会发现有一个名称为docker的目录,docker目录下又包含了docker-cuda,docker-npu,docker-rocm三个目录。这三个目录分别存放了为英伟达的GPU用户,华为的昇腾NPU用户和AMD GPU用户准备的Docker环境配置文件。

这三个目录中都分别包含了一个docker-compose.yml 的Docker Compose工具的核心配置文件和一个Dockerfile的镜像制作脚本文件。

由于本服务器上安装的是英伟达的显卡,所以需要进入到docker-cuda目录下,然后执行docker-compose up –d的命令,即可完成LlamaFactory的安装部署。

三.自定义安装

有时候可能由于服务器环境的问题或者自身的一些特殊需求,需要调整Docker环境配置文件,进行自定义安装。

本文中的自定义安装,只是对Docker脚本文件的一些参数和环境变量,按照自身服务器实际的情况进行了调整。

1. Dockerfile

LlamaFactory对外开放了两个端口,它们分别是7860和8000端口。7860是LlamaFactory的WebUI的访问端口。8000是LlamaFactory对外提供api接口的端口。

由于自身服务器中的7860和8000端口已被其他服务占用,所以本人对Dockerfile文件中端口进行了修改,把7860和8000端口分别改成了17860和18000端口。

由于网络的原因,将官方的PyPI镜像源换成了阿里的PyPI镜像源。

# https://hub.docker.com/r/hiyouga/pytorch/tags
ARG BASE_IMAGE=hiyouga/pytorch:th2.6.0-cu124-flashattn2.7.4-cxx11abi0-devel
FROM ${BASE_IMAGE}
# Installation arguments
ARG PIP_INDEX=https://mirrors.aliyun.com/pypi/simple
ARG EXTRAS=metrics
ARG INSTALL_FLASHATTN=false
ARG HTTP_PROXY=""
# Define environments
ENV MAX_JOBS=16
ENV FLASH_ATTENTION_FORCE_BUILD=TRUE
ENV VLLM_WORKER_MULTIPROC_METHOD=spawn
ENV DEBIAN_FRONTEND=noninteractive
ENV NODE_OPTIONS=""
ENV PIP_ROOT_USER_ACTION=ignore
ENV http_proxy="${HTTP_PROXY}"
ENV https_proxy="${HTTP_PROXY}"
# Use Bash instead of default /bin/sh
SHELL ["/bin/bash", "-c"]
# Set the working directory
WORKDIR /app
# Change pip source
RUN pip config set global.index-url "${PIP_INDEX}" && \
    pip config set global.extra-index-url "${PIP_INDEX}" && \
    pip install --no-cache-dir --upgrade pip packaging wheel setuptools
# Install the requirements
COPY requirements.txt /app
RUN pip install --no-cache-dir -r requirements.txt
# Copy the rest of the application into the image
COPY . /app
# Install LLaMA Factory
RUN pip install --no-cache-dir -e ".[${EXTRAS}]" --no-build-isolation
# Rebuild flash attention
RUN if [ "${INSTALL_FLASHATTN}" == "true" ]; then \
        pip uninstall -y ninja && \
        pip install --no-cache-dir ninja && \
        pip install --no-cache-dir flash-attn --no-build-isolation; \
    fi
# Set up volumes
# VOLUME [ "/root/.cache/huggingface", "/app/shared_data", "/app/output" ]
# Expose port 7860 for LLaMA Board
ENV GRADIO_SERVER_PORT=17860
EXPOSE 17860
# Expose port 8000 for API service
ENV API_PORT=18000
EXPOSE 18000
# unset proxy
ENV http_proxy=
ENV https_proxy=
# Reset pip config
RUN pip config unset global.index-url && \
    pip config unset global.extra-index-url

我们使用这个已经修改后的Dockerfile脚本文件来制作一个llamafactory的镜像。在下面步骤的docker-compose.yml文件中,会在这个构建镜像的基础上来创建LlamaFactory服务。

我们在docker-cuda目录下执行如下命令,便可以构建镜像。

docker build -t docker-cuda-llamafactory:latest .

2. docker-compose.yml

services:
  llamafactory:
    image: docker-cuda-llamafactory:latest
    container_name: llamafactory
    volumes:
      - /opt/LLaMA-Factory-0.9.3/mntdir/ms_cache/:/root/.cache/modelscope/
      - /opt/LLaMA-Factory-0.9.3/mntdir/saves/:/app/saves/
      - /opt/LLaMA-Factory-0.9.3/mntdir/data/:/app/data/
      - /opt/LLaMA-Factory-0.9.3/mntdir/output/:/app/output/
      - /opt/LLaMA-Factory-0.9.3/mntdir/config/:/app/config/
    ports:
      - "17860:17860"
      - "18000:18000"
    ipc: host
    tty: true
    shm_size: "8gb"  # ipc: host is set
    stdin_open: true
    command: sh -c "llamafactory-cli webui"
    deploy:
      resources:
        reservations:
          devices:
          - driver: nvidia
            count: "all"
            capabilities: [ gpu ]
    restart: unless-stopped

从以上的docker-compose.yml脚本文件中可以看出,我们主要是进行了以下几点调整:

(1). image镜像文件

直接使用了我们在上个步骤中已经构建好了的docker-cuda-llamafactory:latest镜像。

(2).容器目录映射挂载

由于是docker部署,所以我们在使用llamafactory进行模型训练时产生的一些的文件都会位于容器中。容器重启后,这些文件都会被销毁掉。而且这些文件位于容器中的话,有时候也不方便获取。所以我们需要把容器的一些需要的文件映射挂载到宿主机上,本例中容器需要的文件主要是集中映射挂载了宿主机的/opt/LLaMA-Factory-0.9.3/mntdir/目录下。

  • 宿主机的ms_cache目录映射挂载到了容器中的/root/.cache/modelscope/目录。该目录主要是存放我们下载的模型文件。我们可以事先从huggingface或者modelscope上,把模型文件下载到该目录下。
  • 宿主机的saves目录映射挂载到了容器中的/app/saves/目录。该目录主要用于存放训练过程的输出结果, 一般是存放了检查点文件,模型适配器文件,训练日志,损失曲线图等等。
  • 宿主机的data目录映射挂载到了容器中的/app/data /目录。该目录主要用于存放了与大模型训练相关的数据集文件和它们的配置文件。
  • 宿主机的output目录映射挂载到了容器中的/app/output /目录。该目录是模型训练产物的核心存放位置。模型训练完成后,我们可以将训练好的模型导出到这个目录下。
  • 宿主机的config目录映射挂载到了容器中的/app/ config /目录。该目录主要是保存每次训练命令的训练参数。

(3).端口映射

我们将容器的17860和18000端口分别映射到了宿主机的17860和18000。17860端口用于LlamaFactory的WebUI的访问。而18000是LlamaFactory对外提供api接口的端口。

(4).shm_size参数

shm_size参数是用于设置Docker容器的共享内存(/dev/shm)分区大小。本示例中由于是训练的是小模型,所以设置了8G。

(5).容器启动命令

容器启动时,执行了” llamafactory-cli webui”的命令。这样容器启动完成后,我们通过http://x.x.x.x:17860/网址来访问LlamaFactory的WebUI界面了。

http://www.jsqmd.com/news/338891/

相关文章:

  • 在RAG增强检索中应该用什么构建上下文?
  • 26年寒假生活指导2.3
  • CSS中的 `dvh` 与 `vh`: 深入理解视口单位
  • 高阶组件(HOC)在Vue中的实现:全面解析与最佳实践
  • Thinkphp和Laravel框架的私人服装西服定制设计与实现沙箱支付
  • 【建议收藏】2026网络安全学习路线全攻略:从小白到黑客大神,这6个阶段就够了!
  • SSM计算机毕设之基于ssm的就业招聘查询系统基于SSM的人才招聘管理系统(完整前后端代码+说明文档+LW,调试定制等)
  • 若战神白起时代的秦昭襄王早逝,宣太后会成为秦国的“吕后”或“慈禧”吗?
  • Thinkphp和Laravel框架的蔚来新能源汽车对比推荐平台设计与实现
  • Nginx 实战实验:从基础配置到虚拟主机搭建 - 指南
  • 网络安全学习指南:SSRF漏洞原理与实战,建议收藏
  • Thinkphp和Laravel框架的生鲜海鲜商城交易系统设计与实现没论文
  • 《构建之法》第二章 个人技术和流程 读书笔记 - GENGAR
  • 收藏!小白入行网络安全指南:从技术原理到月入20K的职业路径全解析
  • 伐度司他Vadadustat治疗慢性肾病透析患者贫血的每日一次口服滴定方案
  • Thinkphp和Laravel框架的社区医疗保健健康预警监控系统的设计与实现
  • OpenClaw 安装文档
  • 开源69.9k星标,国产OCR杀进全球第一梯队,全新升级,文档再歪再糊也不怕(附源码)
  • eScan 杀毒软件被用于供应链攻击传播恶意软件
  • 必收藏!网络安全五大专业深度解析:谁主攻科研?谁进大厂拿高薪?小白程序员入门必看指南
  • PandaWiki:开源企业级AI知识库工具,基于RAG架构的私有化部署方案
  • 奇安信获NVDB-CAVD年度优秀技术支撑单位 10项原创漏洞证书彰显车联网安全实力
  • 无人机城市管理 AI+虚仿 创新实训室:构建城市管理智慧实训新构架
  • 基于springboot的大学生就业招聘系统-计算机毕业设计源码+LW无文档
  • 基于springboot健康管理微信小程序的设计与实现
  • 网络安全黑客入门必看:漏洞挖掘基础知识与平台收藏指南
  • 基于springboot的电动车租赁平台系统-计算机毕业设计源码+LW无文档
  • 国产化工业数据库推荐品牌崛起,筑牢工业高质量发展数据根基 - 速递信息
  • leetcode 3637. 三段式数组 I 简单
  • SpringBoot + Arthas,线上监控诊断进阶玩法!