当前位置: 首页 > 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/tagsARG BASE_IMAGE=hiyouga/pytorch:th2.6.0-cu124-flashattn2.7.4-cxx11abi0-develFROM ${BASE_IMAGE}# Installation argumentsARG PIP_INDEX=https://mirrors.aliyun.com/pypi/simpleARG EXTRAS=metricsARG INSTALL_FLASHATTN=falseARG HTTP_PROXY=""# Define environmentsENV MAX_JOBS=16ENV FLASH_ATTENTION_FORCE_BUILD=TRUEENV VLLM_WORKER_MULTIPROC_METHOD=spawnENV DEBIAN_FRONTEND=noninteractiveENV NODE_OPTIONS=""ENV PIP_ROOT_USER_ACTION=ignoreENV http_proxy="${HTTP_PROXY}"ENV https_proxy="${HTTP_PROXY}"# Use Bash instead of default /bin/shSHELL ["/bin/bash", "-c"]# Set the working directoryWORKDIR /app# Change pip sourceRUN 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 requirementsCOPY requirements.txt /appRUN pip install --no-cache-dir -r requirements.txt# Copy the rest of the application into the imageCOPY . /app# Install LLaMA FactoryRUN pip install --no-cache-dir -e ".[${EXTRAS}]" --no-build-isolation# Rebuild flash attentionRUN 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 BoardENV GRADIO_SERVER_PORT=17860EXPOSE 17860# Expose port 8000 for API serviceENV API_PORT=18000EXPOSE 18000# unset proxyENV http_proxy=ENV https_proxy=# Reset pip configRUN 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:latestcontainer_name: llamafactoryvolumes:- /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: hosttty: trueshm_size: "8gb"  # ipc: host is setstdin_open: truecommand: sh -c "llamafactory-cli webui"deploy:resources:reservations:devices:- driver: nvidiacount: "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.dtcms.com/a/528439.html

相关文章:

  • RK3568笔记102:基于LVGL8的车载娱乐小平板设计
  • 技术随笔:Node.js ESM 中巧用 `-r dotenv/config` 解决环境变量异步加载问题
  • 网站做端口是什么有没有可以免费做试卷的网站_最好可以学会...
  • 游戏人物设计 简单思路 那任务简单说是显示的 完成任务是每个条件脚本自己判断 完成后发给任务脚本信息
  • 利用消息队列(MQ)设计:解耦与异步削峰的艺术
  • 自由学习记录(111)
  • ESP32使用笔记(基于ESP-IDF):小智AI的ESP32项目架构与启动流程全面解析
  • 网站建设 软文网站创作思路
  • 未来之窗昭和仙君(三十七)抽奖随机算法修仙体——东方仙盟筑基期
  • HCIP---作业
  • 海天建设集团公司网站vi应用设计
  • Mybatis10-xml文件与mapper文件的目录位置说明
  • 安全的网站网站开发要
  • 面向模块的综合技术之综合策略优化(六)
  • Mem0:构建具有可扩展长期记忆的生产级AI代理 - 论文学习总结1
  • 【三相异步电动机判断好坏】
  • 整体设计 全面梳理复盘 之6 整体设计表格体系与执行逻辑迭代
  • SpringBoot集成Elasticsearch | Spring官方场景启动器(Spring Data Elasticsearch)方式
  • 【计挑赛】程序设计类真题(C++)
  • HTML HTML5基础(1)
  • 2025年9月电子学会全国青少年软件编程等级考试(Python五级)真题及答案
  • (论文速读)Anyattack: 面向视觉语言模型的大规模自监督对抗性攻击
  • 多线程六脉神剑第六剑:事件同步 (AutoResetEvent/ManualResetEvent)
  • Vue3 Composition API 实战指南
  • asp网站幻灯片不显示wordpress的站点是什么
  • 异步编程 await 和 async
  • Flask 学习路线图
  • 大数据统计网站南宁7天优化网络科技公司
  • ajax网站开发技术网店设计素材
  • GitHub 热榜项目 - 日榜(2025-10-25)