靜態(tài)網(wǎng)站 apache/專業(yè)網(wǎng)站優(yōu)化排名
Docker Compose 部署大模型GPU集群:高效分配與管理算力資源
文章目錄
- Docker Compose 部署大模型GPU集群:高效分配與管理算力資源
- 一 Dockerfile 編寫
- 二 Dockerfile 示例
- 三 分配GPU資源
- 1)GPU分配:指定count
- 2)GPU分配:指定deviceid
本文詳細(xì)介紹了如何使用 Docker Compose 部署大模型所需的 GPU 算力資源,提供從編寫 Dockerfile
到 GPU 分配的完整流程。通過 docker-compose
文件,您可以指定 GPU 資源,靈活控制設(shè)備數(shù)量或指定特定的 GPU 使用。無論是通過 count
參數(shù)分配 GPU 數(shù)量,還是使用 device_ids
映射具體的 GPU,本指南都涵蓋了相關(guān)的配置示例,確保高效管理和使用多GPU環(huán)境。此外,文章還展示了如何為 Python 應(yīng)用配置依賴和工作環(huán)境,使部署變得更加簡(jiǎn)潔流暢。
預(yù)備課:
Docker 安裝與配置:從入門到部署
Docker 鏡像的構(gòu)建與多架構(gòu)支持
一 Dockerfile 編寫
Dockerfile 關(guān)鍵字
關(guān)鍵字 | 作用 | 備注 |
---|---|---|
FROM | 指定父鏡像 | 指定dockerfile基于那個(gè)image構(gòu)建 |
MAINTAINER | 作者信息 | 用來標(biāo)明這個(gè)dockerfile誰寫的 |
LABEL | 標(biāo)簽 | 用來標(biāo)明dockerfile的標(biāo)簽 可以使用Label代替Maintainer 最終都是在docker image基本信息中可以查看 |
RUN | 執(zhí)行命令 | 執(zhí)行一段命令 默認(rèn)是/bin/sh 格式: RUN command 或者 RUN [“command” , “param1”,“param2”] |
CMD | 容器啟動(dòng)命令 | 提供啟動(dòng)容器時(shí)候的默認(rèn)命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD [“command” , “param1”,“param2”] |
ENTRYPOINT | 入口 | 一般在制作一些執(zhí)行就關(guān)閉的容器中會(huì)使用 |
COPY | 復(fù)制文件 | build的時(shí)候復(fù)制文件到image中 |
ADD | 添加文件 | build的時(shí)候添加文件到image中 不僅僅局限于當(dāng)前build上下文 可以來源于遠(yuǎn)程服務(wù) |
ENV | 環(huán)境變量 | 指定build時(shí)候的環(huán)境變量 可以在啟動(dòng)的容器的時(shí)候 通過-e覆蓋 格式ENV name=value |
ARG | 構(gòu)建參數(shù) | 構(gòu)建參數(shù) 只在構(gòu)建的時(shí)候使用的參數(shù) 如果有ENV 那么ENV的相同名字的值始終覆蓋arg的參數(shù) |
VOLUME | 定義外部可以掛載的數(shù)據(jù)卷 | 指定build的image那些目錄可以啟動(dòng)的時(shí)候掛載到文件系統(tǒng)中 啟動(dòng)容器的時(shí)候使用 -v 綁定 格式 VOLUME [“目錄”] |
EXPOSE | 暴露端口 | 定義容器運(yùn)行的時(shí)候監(jiān)聽的端口 啟動(dòng)容器的使用-p來綁定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp |
WORKDIR | 工作目錄 | 指定容器內(nèi)部的工作目錄 如果沒有創(chuàng)建則自動(dòng)創(chuàng)建 如果指定/ 使用的是絕對(duì)地址 如果不是/開頭那么是在上一條workdir的路徑的相對(duì)路徑 |
USER | 指定執(zhí)行用戶 | 指定build或者啟動(dòng)的時(shí)候 用戶 在RUN CMD ENTRYPONT執(zhí)行的時(shí)候的用戶 |
HEALTHCHECK | 健康檢查 | 指定監(jiān)測(cè)當(dāng)前容器的健康監(jiān)測(cè)的命令 基本上沒用 因?yàn)楹芏鄷r(shí)候 應(yīng)用本身有健康監(jiān)測(cè)機(jī)制 |
ONBUILD | 觸發(fā)器 | 當(dāng)存在ONBUILD關(guān)鍵字的鏡像作為基礎(chǔ)鏡像的時(shí)候 當(dāng)執(zhí)行FROM完成之后 會(huì)執(zhí)行 ONBUILD的命令 但是不影響當(dāng)前鏡像 用處也不怎么大 |
STOPSIGNAL | 發(fā)送信號(hào)量到宿主機(jī) | 該STOPSIGNAL指令設(shè)置將發(fā)送到容器的系統(tǒng)調(diào)用信號(hào)以退出。 |
SHELL | 指定執(zhí)行腳本的shell | 指定RUN CMD ENTRYPOINT 執(zhí)行命令的時(shí)候 使用的shell |
二 Dockerfile 示例
示例是 Java 的 Dockerfile,請(qǐng)改為python的或者其他語言的
# 使用官方 Python 3.9 鏡像作為基礎(chǔ)鏡像
FROM python:3.9-slim# 作者信息
MAINTAINER your <your@email.com># 設(shè)置環(huán)境變量,指定語言和字符編碼
ENV LANG zh_CN.UTF-8
ENV LANG C.UTF-8# 暴露端口(可以根據(jù)實(shí)際應(yīng)用需要修改)
# EXPOSE 80# 將環(huán)境變量 LANG 添加到系統(tǒng)配置中
RUN echo "export LANG=zh_CN.UTF-8" >> /etc/profile# VOLUME 指定了臨時(shí)文件目錄為 /tmp,映射到主機(jī)的 /var/lib/docker 下
VOLUME /tmp# 設(shè)置工作目錄為 /app
WORKDIR /app# 復(fù)制當(dāng)前目錄下的所有文件到容器的 /app 目錄中
COPY . /app# 如果有需要安裝的 Python 依賴包,可以使用 requirements.txt 文件安裝依賴
# 如果沒有 requirements.txt,以下行可以注釋掉或刪除
COPY requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir -r requirements.txt# 這里是啟動(dòng)腳本,使用 Python 啟動(dòng)應(yīng)用程序(需要根據(jù)實(shí)際情況修改入口文件)
ENTRYPOINT ["python", "app.py"]
三 分配GPU資源
Docker compose啟動(dòng)分配GPU資源
1)GPU分配:指定count
version: "3.8"
services:test:# 使用 NVIDIA 官方的 CUDA 開發(fā)鏡像,基于 UBI8 (Red Hat Universal Base Image 8)image: nvidia/cuda:12.3.1-devel-ubi8# 容器啟動(dòng)時(shí)執(zhí)行的命令,這里是運(yùn)行 nvidia-smi 以查看 GPU 的狀態(tài)deploy:resources:reservations:devices:- driver: nvidia # 指定使用 NVIDIA 作為設(shè)備驅(qū)動(dòng)count: 1 # 分配一個(gè) GPU 給容器capabilities: [gpu] # 指定容器使用 GPU 計(jì)算能力
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()"# 重啟策略:容器退出時(shí)總是重新啟動(dòng)容器restart: always ports:- "9000:9000"- "9001:9001"- "9002:9002"environment:- TZ=Asia/Shanghai # 設(shè)置時(shí)區(qū)為上海volumes:- ./pub/llm:/opt/new-path/models/model_repository# 冒號(hào)前為主機(jī)上的模型目錄路徑,請(qǐng)根據(jù)實(shí)際環(huán)境修改;冒號(hào)后為映射到容器內(nèi)的路徑deploy:resources:reservations:devices:- driver: nvidia# 指定宿主機(jī)上映射給容器使用的GPU ID,若需要映射多個(gè)GPU,可以寫為['0','1','2']device_ids: ['0', '3']capabilities: [gpu] # 使用GPU的計(jì)算能力