日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

在啟用GPU的Docker容器中運行AI模型

 碼農(nóng)9527 2021-05-06

 容器技術(shù)(例如Docker)極大地簡化了依賴性管理和軟件的可移植性。在本系列文章中,我們將探討Docker在機器學(xué)習(xí)(ML)場景中的用法。

    本系列假定您熟悉ML,一般的容器化,尤其是Docker。歡迎您下載項目代碼。

    在上一篇文章中,我們創(chuàng)建了用于實驗,訓(xùn)練和推斷的基本容器。為此,我們使用了Intel/AMD和ARMCPU。在這一節(jié)中,我們將利用NvidiaGPU的功能來減少訓(xùn)練和推理時間。

    準備Docker主機以使用NvidiaGPU

    要使用來自Docker的GPU,我們需要具有NvidiaGPU和Linux的主機(自2020年12月以來,GPU支持也通過WindowsLinux子系統(tǒng)(WSL2)在Windows上運行)。在云中,您所需要做的就是選擇適當(dāng)?shù)腣M大小和OS映像。例如,在Azure上具有Ubuntu18.04的NC6和數(shù)據(jù)科學(xué)虛擬機。

    根據(jù)Linux發(fā)行版和GPU模型的不同,在本地計算機上的配置可能會要求更高:

    確保主機上已安裝NvidiaGPU驅(qū)動程序。

    安裝適合您的發(fā)行版的nvidia-container-runtime。

    重新啟動Docker守護程序。

    現(xiàn)在,您應(yīng)該可以運行帶有--gpus屬性的容器了。例如,僅使用第一個GPU:

$ docker run --gpus "device=0" nvidia/cuda:11.2.1-runtime nvidia-smi1復(fù)制代碼類型:[html]

WEB

    在主機和容器中使用相同的CUDA版本(在本例中為11.2)很重要。如果版本不匹配,則容器將無法啟動,并顯示諸如“條件不滿足:cuda>=11.0”之類的錯誤。

    預(yù)測Dockerfile

    我們建議您始終從給定任務(wù)可用的最小基礎(chǔ)映像開始,通常后綴為“運行時”。盡管“devel”后綴似乎更合適,但它表示的圖像包含了大多數(shù)ML場景中不需要的許多工具。

    使用Nvidia提供的基本映像(例如,上面提到的nvidia/cuda:11.2.1-runtime),在其中安裝Python和我們的庫可能很誘人。不幸的是,這至少在TensorFlow中不起作用。我們可以按照提供的逐步說明進行操作,也可以使用官方推薦的TensorflowDocker映像。

    我們將使用后一種選擇。除了該FROM語句外,新的預(yù)測Dockerfile的其余部分與我們用于僅CPU版本的預(yù)測相同:

FROM tensorflow/tensorflow:2.3.2-gpu 
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get -y install --no-install-recommends ffmpeg libsm6 libxext6 && apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/*
ARG USERNAME=mluser
ARG USERID=1000
RUN useradd --system --create-home --shell /bin/bash --uid $USERID $USERNAME
COPY requirements.txt /tmp/requirements.txt
RUN pip3 install --no-cache-dir -r /tmp/requirements.txt && rm /tmp/requirements.txt
USER $USERNAME
WORKDIR /home/$USERNAME/app
COPY app /home/$USERNAME/app
ENTRYPOINT ["python", "predict.py"]123456789101112131415復(fù)制代碼類型:[html]

    請注意,我們使用TensorFlow版本2.3.2,而不是以前的2.4.1。主要原因是2.4.1版的官方Docker映像要大得多(>5.5GB,而選定的映像約為3GB)。稍舊的版本足以滿足我們的目的。

    因為我們使用已包含TensorFlow的基礎(chǔ)圖像(以及匹配的NumPy版本),所以我們的requirements.txt縮小為一行:

opencv-python==4.5.1.481復(fù)制代碼類型:[html]

    下載項目代碼后,我們可以構(gòu)建圖像:

$ docker build --build-arg USERID=$(id -u) -t mld05_gpu_predict .1復(fù)制代碼類型:[html]

    如前所述,--build-argUSERID如果不需要該參數(shù),則可以跳過該參數(shù)(尤其是在Windows上)。

    培訓(xùn)Dockerfile

    因為我們不僅希望將GPU用于預(yù)測,還希望將其用于訓(xùn)練,所以我們需要引入其他圖像定義-Dockerfile.train:

FROM mld05_gpu_predict:latest
ENTRYPOINT ["python", "train.py"]12復(fù)制代碼類型:[html]

    我們ENTRYPOINT僅以預(yù)測圖像為基礎(chǔ),并添加一個用train.py腳本覆蓋的單層。為了避免增加圖像和代碼重復(fù)的數(shù)量,這是一個很小的折衷。我們不介意此處的“最新”標簽,因為我們可以完全控制所使用的基本圖像。

    現(xiàn)在,我們來構(gòu)建它:

$ docker build -t mld05_gpu_train -f 'Dockerfile.train' .1復(fù)制代碼類型:[html]

    進行培訓(xùn)

    讓我們嘗試使用GPU和CPU進行培訓(xùn)-比較性能。

    使用GPU進行培訓(xùn):

$ docker run -v $(pwd)/data:/home/mluser/data -v $(pwd)/models:/home/mluser/models  --rm --user $(id -u):$(id -g) --gpus "device=0"  mld05_gpu_train --model_path ../models/mnist_model.h5 --epochs 5123復(fù)制代碼類型:[html]

WEB

    請注意--model_path傳遞給訓(xùn)練腳本的和--epochs參數(shù)。

    要僅使用CPU進行訓(xùn)練,我們只需刪除--gpus“device=0”參數(shù):

$ docker run -v $(pwd)/data:/home/mluser/data -v $(pwd)/models:/home/mluser/models  --rm --user $(id -u):$(id -g)  mld05_gpu_train --model_path ../models/mnist_model.h5 --epochs 5123復(fù)制代碼類型:[html]

WEB

    如您所見,GPU將訓(xùn)練速度提高了一倍(從CPU上的每個周期18秒增加到GPU上的每個周期8秒)。數(shù)量不多,但是我們在這里訓(xùn)練一個非常簡單的模型。完成一項現(xiàn)實生活中的任務(wù),您可以預(yù)期獲得5到10倍的改進。

    如果結(jié)果不同,請查看TensorFlow日志。如果無法使用GPU,您將看到諸如“無法加載動態(tài)庫(...)”之類的錯誤。

    運行預(yù)測

    訓(xùn)練好模型后,我們可以檢查其在預(yù)測中的表現(xiàn):

$ docker run -v $(pwd)/data:/home/mluser/data -v $(pwd)/models:/home/mluser/models  --rm --user $(id -u):$(id -g) --gpus "device=0"  mld05_gpu_predict --images_path /home/mluser/data/test_mnist_images/*.jpg123復(fù)制代碼類型:[html]

WEB

    概括

    在本文中,我們已經(jīng)成功地使用帶有GPU支持的Docker容器進行了訓(xùn)練和推理。我們已經(jīng)準備好使用Docker處理基本的ML任務(wù)。在下一個系列中,我們將擴展我們的知識,以解決更復(fù)雜的情況,這在實際場景中使用Docker時通常很常見。

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多