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

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的或者其他语言的

# 使用官方 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.mzph.cn/bicheng/55497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虚商目前有哪些业务痛点?

虚拟运营商当前面临的业务痛点主要集中在市场竞争、运营成本、技术依赖、用户体验及政策监管等方面。 一、市场竞争激烈 1、竞争者数量增加: 随着市场准入门槛的降低&#xff0c;越来越多的企业进入虚拟运营商市场导致市场竟争日益激烈。为了争夺市场份额&#xff0c;企业不得不…

【Xcode Command Line Tools】安装指南

安装指令 xcode-select --install安装 完成安装 验证 $ xcode-select -p /Library/Developer/CommandLineTools

使用Chrome浏览器时打开网页如何禁用缓存

缓存是浏览器用于临时存储网页资源的一种机制&#xff0c;可以提高网页加载速度和减轻服务器负载。 然而&#xff0c;有时候我们需要阻止缓存中的Chrome浏览器&#xff0c;以便获取最新的网页内容。以下是一些方法可以实现这个目标&#xff1a; 1、强制刷新页面&#xff1a;在C…

【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错

1. 运行项目 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Appl…

【车载开发系列】ParaSoft单元测试环境配置(四)

【车载开发系列】ParaSoft单元测试环境配置&#xff08;四&#xff09; 【车载开发系列】ParaSoft单元测试环境配置&#xff08;四&#xff09; 【车载开发系列】ParaSoft单元测试环境配置&#xff08;四&#xff09;一. 如何设置过滤二. 如何设置静态扫描的规则三. 如何设置单…

Pycharm 本地搭建 stable-diffusion-webui

一、下载工程源码 Github官方连接 https://github.com/AUTOMATIC1111/stable-diffusion-webui 二、Pycharm打开工程 1、设置环境 文件-设置-项目-Python解析器-添加解释器-添加本地解释器 Conda环境-创造新环境-Python版本3.10 注意一定要选择Python3.10版本&#xff0c;否…

tushare库简介及数据获取方法

文章目录 tushare库简介tushare使用方法接口数据获取实例获取交易日历股票基础信息沪股通和深股通成份股上市公司基础信息获取新股上市列表数据A股日线行情A股周线行情A股月线行情股票每日指标&#xff0c;选股分析 tushare库简介 tushare库是一个用于抓取中国股票的历史和实时…

虚拟机三种网络模式详解

在电脑里开一台虚拟机&#xff0c;是再常见不过的操作了。无论是用虚拟机玩只有旧版本系统能运行的游戏&#xff0c;还是用来学习Linux、跑跑应用程序都是很好的。而这其中&#xff0c;虚拟机网络是绝对绕不过去的。本篇文章通俗易懂的介绍了常见的虚拟网络提供的三种网络链接模…

从0开始实现es6 promise类

主要由基础实现和静态类的实现两部分组成。 1 基础实现&#xff08;不含静态类&#xff09; 1.1 使用类实现完成构造函数 实现代码如下&#xff0c;构造函数传入一个回调函数&#xff0c;定义resolve和reject函数&#xff0c;将两个函数作为参数执行回调函数。 // 1. 使用类实…

Java面试:ArrayList 和 LinkedList 的区别是什么?谈谈你对ArrayList和LinkedList的理解

在 Java 的集合框架中&#xff0c;ArrayList 和 LinkedList 是两种常用的 List 实现。它们各具特点&#xff0c;适用于不同的场景。本文将深入探讨这两种数据结构的概念、用法、联系和区别&#xff0c;帮助你选择合适的集合类来满足特定需求。 一、基本介绍 1. ArrayList Ar…

C/C++进阶(一)--内存管理

更多精彩内容..... &#x1f389;❤️播主の主页✨&#x1f618; Stark、-CSDN博客 本文所在专栏&#xff1a; 学习专栏C语言_Stark、的博客-CSDN博客 其它专栏&#xff1a; 数据结构与算法_Stark、的博客-CSDN博客 ​​​​​​项目实战C系列_Stark、的博客-CSDN博客 座右铭&a…

D3.js数据可视化基础——基于Notepad++、IDEA前端开发

实验:D3.js数据可视化基础 1、实验名称 D3数据可视化基础 2、实验目的 熟悉D3数据可视化的使用方法。 3、实验原理 D3 的全称是(Data-Driven Documents),是一个被数据驱动的文档,其实就是一个 JavaScript 的函数库,使用它主要是用来做数据可视化的。本次实…

【前沿 热点 顶会】NIPS 2024中目标检测有关的论文

迈向灵活的 3D 感知&#xff1a;以对象为中心的占领完成增强长序列的 3D 目标检测 虽然 3D 对象边界框(BBox)表示在自动驾驶感知中得到了广泛的应用&#xff0c;但它们缺乏捕捉对象内部几何形状的复杂细节的能力。最近&#xff0c;占有&#xff08;occupancy&#xff09;已经成…

大数据-151 Apache Druid 集群模式 配置启动【上篇】 超详细!

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

《Linux从小白到高手》理论篇(六):Linux软件安装一篇通

List item 本篇介绍Linux软件安装相关的操作命令&#xff0c;看完本文&#xff0c;有关Linux软件安装相关操作的常用命令你就掌握了99%了。 Linux软件安装 RPM RPM软件的安装、删除、更新只有root权限才能使用&#xff1b;查询功能任何用户都可以操作&#xff1b;如果普通用…

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——13.mapset(模拟实现)

1.对红黑树进行改造 1.1treenode模板参数改变 之前构建treenode模板参数传的是class k,class v(set为k&#xff0c;k&#xff1b;map是k&#xff0c;v&#xff09;&#xff0c;现在直接用T代替 template<class T> //这里直接传了T作为模板参数&#xff0c;T可能是pai…

【WRF工具】cmip6-to-wrfinterm工具概述:生成WRF中间文件

cmip6-to-wrfinterm工具概述 cmip6-to-wrfinterm工具安装cmip6-to-wrfinterm工具使用快速启动&#xff08;Quick start&#xff09;情景1&#xff1a;MPI-ESM-1-2-HR&#xff08;默认&#xff09;&#xff1a;情景2&#xff1a;BCMM情景3&#xff1a;EC-Earth3 更改使用&#x…

Hive数仓操作(四)

一、Hive 创建表案例一&#xff08;ARRAY数组类型&#xff09; 1. 准备数据文件 首先&#xff0c;准备一个名为 stu2.txt 的文件&#xff0c;文件内容示例如下&#xff1a; 1001 Alice fish,cat 1002 Bob dog,rabbit 1003 Charlie bird注意&#xff1a; …

进度条(倒计时)Linux

\r回车(回到当前行开头) \n换行 行缓冲区概念 什么现象&#xff1f; 什么现象&#xff1f;&#xff1f; 什么现象&#xff1f;&#xff1f;&#xff1f; 自己总结&#xff1a; #pragma once 防止头文件被重复包含 倒计时 在main.c中&#xff0c;windows.h是不可以用的&…

大语言模型入门(一)——大语言模型智能助手

一、大语言模型智能助手 2022年末ChatGPT一经推出&#xff0c;一时间不注册个账号用一下都跟不上潮流了。然而&#xff0c;我们要注册OpenAI的账号使用ChatGPT还是一件比较麻烦的事情&#xff08;懂的都懂&#xff09;。好在&#xff0c;国内各大团队非常给力地及时推出了自研的…