域名申请而完成以后怎么做网站,中小企业网站设计与开发目的,建设银行武威分行网站,云南网站开发公司Docker Compose 部署大模型GPU集群#xff1a;高效分配与管理算力资源 文章目录 Docker Compose 部署大模型GPU集群#xff1a;高效分配与管理算力资源一 Dockerfile 编写二 Dockerfile 示例三 分配GPU资源1#xff09;GPU分配#xff1a;指定count2#xff09;GPU分配高效分配与管理算力资源 文章目录 Docker Compose 部署大模型GPU集群高效分配与管理算力资源一 Dockerfile 编写二 Dockerfile 示例三 分配GPU资源1GPU分配指定count2GPU分配指定deviceid 本文详细介绍了如何使用 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 namevalueARG构建参数构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数VOLUME定义外部可以挂载的数据卷指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME [“目录”]EXPOSE暴露端口定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udpWORKDIR工作目录指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径USER指定执行用户指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户HEALTHCHECK健康检查指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制ONBUILD触发器当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大STOPSIGNAL发送信号量到宿主机该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。SHELL指定执行脚本的shell指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell
二 Dockerfile 示例
示例是 Java 的 Dockerfile请改为python的或者其他语言的
# 使用官方 Python 3.9 镜像作为基础镜像
FROM python:3.9-slim# 作者信息
MAINTAINER your youremail.com# 设置环境变量指定语言和字符编码
ENV LANG zh_CN.UTF-8
ENV LANG C.UTF-8# 暴露端口可以根据实际应用需要修改
# EXPOSE 80# 将环境变量 LANG 添加到系统配置中
RUN echo export LANGzh_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资源
1GPU分配指定count
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 计算能力2GPU分配指定deviceid
version: 3.8
services:test-gpu:# 容器名称container_name: test-gpu # 使用的镜像指定为带有GPU支持的TensorFlow镜像image: tensorflow/tensorflow:latest-gpucommand: python -c import tensorflow as tf;tf.test.gpu_device_name()# 重启策略容器退出时总是重新启动容器restart: always ports:- 9000:9000- 9001:9001- 9002:9002environment:- TZAsia/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的计算能力