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

devtools/2024/10/4 14:57:31/

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

文章目录

    • Docker Compose 部署大模型GPU集群:高效分配与管理算力资源
      • 一 Dockerfile 编写
      • 二 Dockerfile 示例
      • 三 分配GPU资源
        • 1)GPU分配:指定count
        • 2)GPU分配:指定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 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
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
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: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的计算能力

http://www.ppmy.cn/devtools/121312.html

相关文章

科技赋能,商贸物流新速度 —— 智慧供应链商城加速企业成长

科技赋能&#xff0c;商贸物流新速度 —— 智慧供应链商城加速企业成长 随着科技的飞速发展&#xff0c;AI&#xff08;人工智能&#xff09;、大数据、物联网等先进技术正深刻重塑着商贸物流行业&#xff0c;推动其向更高效、更智能、更环保的方向迈进。这些技术的应用不仅提…

[数据结构] 二叉树题目 (二)

目录 一. 另一颗树的子树 1.1 题目 1.2 示例 1.3 分析 1.4 解决 二. 平衡二叉树 2.1 题目 2.2 示例 2.3 分析 2.4 解决 三. 二叉树的遍历和创建 3.1 题目 3.2 示例 3.3 解决 一. 另一颗树的子树572. 另一棵树的子树 - 力扣&#xff08;LeetCode&#xff09; 1.1…

硬件-开关电源-结构组成及元件作用

文章目录 一&#xff1a;开关电源组成1.1 开关电源是什么&#xff1f;1.2 开关电源六个组成部分 二&#xff1a;六个组成部分的作用2.1 EMC区域2.2 输入整流滤波区域2.3 控制区域2.4 变压器2.5 输出整流滤波区域2.6 反馈电路区域道友:勿以小恶弃人大美&#xff0c;勿以小怨忘人…

2-2.Jetpack 之 Room 简单编码模板(优化版)(Entity、DAO、Database、Repository)

一、Room 1、Room 概述 Room 是 Jetpack 中的一个重要成员&#xff0c;它是一个持久化库&#xff0c;它为管理数据库提供了简单强大的方法 2、Room 引入 在模块级 build.gradle 中引入相关依赖 implementation "androidx.room:room-runtime:2.2.5" annotationPr…

华为OD机试 - 区间交叠问题 - 贪心算法(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

vue基于Spring Boot框架的高校实验室预约管理系统

目录 毕设制作流程功能和技术介绍系统实现截图开发核心技术介绍&#xff1a;使用说明开发步骤编译运行代码执行流程核心代码部分展示可行性分析软件测试详细视频演示源码获取 毕设制作流程 &#xff08;1&#xff09;与指导老师确定系统主要功能&#xff1b; &#xff08;2&am…

行为设计模式 -观察者模式- JAVA

观察者模式 一.简介二. 案例2.1 抽象主题&#xff08;Subject&#xff09;2.2 具体主题&#xff08;Concrete Subject&#xff09;2.3 抽象观察者&#xff08;Observer&#xff09;2.4 具体观察者&#xff08;Concrete Observer&#xff09;2.5 测试 三. 结论3.1 优缺点3.2 使用…

linux 查看端口占用

文章目录 查看端口占用使用lsof使用netstat 查看端口占用 使用lsof 可以使用lsof -i:端口号 来查看端口占用情况 lsof -i:8010 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 35653 zhanghe 10u IPv4 0xcac2e413ddf9c5b9 0t0 …