Docker Compose 部署大模型GPU集群:高效分配与管理算力资源

Docker Compose 部署大模型GPU集群:高效分配与管理算力资源

文章目录

    • [Docker Compose 部署大模型GPU集群:高效分配与管理算力资源](#Docker Compose 部署大模型GPU集群:高效分配与管理算力资源)

本文详细介绍了如何使用 Docker Compose 部署大模型所需的 GPU 算力资源,提供从编写 Dockerfile 到 GPU 分配的完整流程。通过 docker-compose 文件,您可以指定 GPU 资源,灵活控制设备数量或指定特定的 GPU 使用。无论是通过 count 参数分配 GPU 数量,还是使用 device_ids 映射具体的 GPU,本指南都涵盖了相关的配置示例,确保高效管理和使用多GPU环境。此外,文章还展示了如何为 Python 应用配置依赖和工作环境,使部署变得更加简洁流畅。

预备课

Docker 安装与配置:从入门到部署

Docker 镜像的构建与多架构支持

一 Dockerfile 编写

Dockerfile 关键字

关键字 作用 备注
FROM 指定父镜像 指定dockerfile基于那个image构建
MAINTAINER 作者信息 用来标明这个dockerfile谁写的
LABEL 标签 用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看
RUN 执行命令 执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN ["command" , "param1","param2"]
CMD 容器启动命令 提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD ["command" , "param1","param2"]
ENTRYPOINT 入口 一般在制作一些执行就关闭的容器中会使用
COPY 复制文件 build的时候复制文件到image中
ADD 添加文件 build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务
ENV 环境变量 指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=value
ARG 构建参数 构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数
VOLUME 定义外部可以挂载的数据卷 指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME ["目录"]
EXPOSE 暴露端口 定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp
WORKDIR 工作目录 指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径
USER 指定执行用户 指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户
HEALTHCHECK 健康检查 指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制
ONBUILD 触发器 当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大
STOPSIGNAL 发送信号量到宿主机 该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。
SHELL 指定执行脚本的shell 指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell

二 Dockerfile 示例

示例是 Java 的 Dockerfile,请改为python的或者其他语言的

dockerfile 复制代码
# 使用官方 Python 3.9 镜像作为基础镜像
FROM python:3.9-slim

# 作者信息
MAINTAINER your <your@email.com>

# 设置环境变量,指定语言和字符编码
ENV LANG zh_CN.UTF-8
ENV LANG C.UTF-8

# 暴露端口(可以根据实际应用需要修改)
# EXPOSE 80

# 将环境变量 LANG 添加到系统配置中
RUN echo "export LANG=zh_CN.UTF-8" >> /etc/profile

# VOLUME 指定了临时文件目录为 /tmp,映射到主机的 /var/lib/docker 下
VOLUME /tmp

# 设置工作目录为 /app
WORKDIR /app

# 复制当前目录下的所有文件到容器的 /app 目录中
COPY . /app

# 如果有需要安装的 Python 依赖包,可以使用 requirements.txt 文件安装依赖
# 如果没有 requirements.txt,以下行可以注释掉或删除
COPY requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# 这里是启动脚本,使用 Python 启动应用程序(需要根据实际情况修改入口文件)
ENTRYPOINT ["python", "app.py"]

三 分配GPU资源

Docker compose启动分配GPU资源

1)GPU分配:指定count
yaml 复制代码
version: "3.8"
services:
  test:
    # 使用 NVIDIA 官方的 CUDA 开发镜像,基于 UBI8 (Red Hat Universal Base Image 8)
    image: nvidia/cuda:12.3.1-devel-ubi8
    # 容器启动时执行的命令,这里是运行 nvidia-smi 以查看 GPU 的状态
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia  # 指定使用 NVIDIA 作为设备驱动
              count: 1  # 分配一个 GPU 给容器
              capabilities: [gpu]  # 指定容器使用 GPU 计算能力
2)GPU分配:指定deviceid
yaml 复制代码
version: "3.8"
services:
  test-gpu:
    # 容器名称
    container_name: test-gpu 
     # 使用的镜像,指定为带有GPU支持的TensorFlow镜像
    image: tensorflow/tensorflow:latest-gpu
    command: python -c "import tensorflow as tf;tf.test.gpu_device_name()"
     # 重启策略:容器退出时总是重新启动容器
    restart: always      
    ports:
      - "9000:9000"
      - "9001:9001"
      - "9002:9002"
    environment:
      - TZ=Asia/Shanghai  # 设置时区为上海
    volumes:
      - ./pub/llm:/opt/new-path/models/model_repository
      # 冒号前为主机上的模型目录路径,请根据实际环境修改;冒号后为映射到容器内的路径
    deploy:
      resources:
        reservations:
          devices:
          - driver: nvidia
             # 指定宿主机上映射给容器使用的GPU ID,若需要映射多个GPU,可以写为['0','1','2']
            device_ids: ['0', '3']
            capabilities: [gpu] # 使用GPU的计算能力
相关推荐
一只脑洞君19 分钟前
Kubernetes(K8s)的简介
java·容器·kubernetes
妍妍的宝贝25 分钟前
k8s 中存储之 PV 持久卷 与 PVC 持久卷申请
云原生·容器·kubernetes
程序那点事儿26 分钟前
k8s 之安装metrics-server
云原生·容器·kubernetes
qq_4275060829 分钟前
linux和windows系统使用k8s控制节点的kubernetes资源
linux·运维·kubernetes
Zl15975315975335 分钟前
k8s-pod的管理及优化设置
云原生·容器·kubernetes
慕雪华年1 小时前
【Linux】wsl2安装ubuntu并移动安装位置
linux·运维·ubuntu
沙振宇1 小时前
【Linux】Ubuntu20.04上使用RabbitVCS的图形化SVN
linux·运维·服务器
小狮子安度因1 小时前
Linux源码阅读笔记-以太网驱动分析
linux·运维·笔记
敲代码不忘补水1 小时前
Docker 启动 Neo4j:详细配置指南和浏览器访问
docker·容器·neo4j·docker compose
2401_840192271 小时前
nginx常用功能,网站、反向代理、四层代理、优化方法、python动态页面解析。
运维·nginx