購物網(wǎng)站做推廣銅仁搜狗推廣
實(shí)際應(yīng)用
神經(jīng)網(wǎng)絡(luò)項(xiàng)目由x86cpu的linux環(huán)境移到arm cpu架構(gòu)上運(yùn)行,使用docker進(jìn)行測試以及環(huán)境配置。
- docker load -i 鏡像壓縮文件.tar
- docker load -i命令用于從一個壓縮的鏡像存檔文件(通常是以.tar擴(kuò)展名結(jié)尾)中加載鏡像到本地Docker引擎中。
- docker load:加載一個本地的鏡像。
- -i:指定輸入文件,后面跟著要加載的鏡像存檔文件。
- docker images 查看鏡像
- docker run --name 容器名 -it -e ASCEND_VISIBLE_DEVICES=0 -p 1234:5678 鏡像id /bin/bash
- docker run:運(yùn)行一個新的容器。
- -it:使用交互式終端運(yùn)行容器,其中-i表示交互式,-t表示分配一個偽終端。
- -e ASCEND_VISIBLE_DEVICES=0。環(huán)境變量選擇使用哪個NPU卡
- -p 1234:5678:端口映射,容器內(nèi)部端口與宿主機(jī)端口進(jìn)行映射
- /bin/bash:進(jìn)入到容器的bash終端
- docker rename 原名稱 現(xiàn)名稱
- docker cp <source_path> <container_name>:<destination_path>
- docker ps
- 查看正在運(yùn)行的容器
- docker ps -a
- 查看所有容器
- docker start 容器名
- dockers stop 容器名
- docker rm 容器名
- docker exec -it <container_name> <command>
- <container_name> 是要進(jìn)入的容器的名稱或ID。
- <command> 是要在容器內(nèi)執(zhí)行的命令。通常,我們使用/bin/bash或/bin/sh作為命令,以啟動一個交互式Shell會話。
在Docker容器中安裝NPU驅(qū)動固件(宿主機(jī)裝了,docker可以不裝)
- 在宿主機(jī)上已經(jīng)安裝了相應(yīng)的NPU驅(qū)動和固件。
- 容器在創(chuàng)建時,需要與宿主機(jī)共享NPU設(shè)備。
- docker run --privileged -it -v /dev:/dev <image_name> bash
- --privileged參數(shù)來賦予容器特權(quán),使其能夠訪問宿主機(jī)的設(shè)備。同時,使用-v /dev:/dev參數(shù)來共享宿主機(jī)的/dev目錄,包括其中的設(shè)備文件。
ChatGLM部署華為arm服務(wù)器
- 安裝toolkit工具包
- 容器內(nèi)沒安裝NPU驅(qū)動固件,所以需要到.bashrc中配置環(huán)境變量
- 環(huán)境變量要加export xxx=xxxx
- 安裝torch依賴
- 解壓代碼包
- 創(chuàng)建模型權(quán)重軟鏈接
- 替換transformers的utils.py文件(可以先不做)
- 權(quán)重切分與執(zhí)行
Docker架構(gòu)
鏡像(三類)
- 基礎(chǔ)鏡像
Ubuntu、Debian、CentOs、Windows、MacOs
- docker commit構(gòu)建鏡像
Docker commit 是將正在運(yùn)行的容器保存為新的鏡像的一種方法。將當(dāng)前容器的狀態(tài)快照成一個新的鏡像。優(yōu)點(diǎn)快速和方便,缺點(diǎn)占用空間大、冗余、效率低、可重復(fù)性弱、容易出錯。
- 從鏡像運(yùn)行容器,實(shí)際上是在鏡像頂部上加了一層可寫層,所有對容器文件系統(tǒng)的修改,都在這一層中進(jìn)行,不影響已經(jīng)存在的層。從容器構(gòu)建鏡像,實(shí)際上是把容器的頂層固化到鏡像中。鏡像的體積只會增大,不會減小。
# 將容器轉(zhuǎn)換為鏡像
docker commit 容器id 鏡像名稱:版本號
# 將鏡像打包為壓縮包,用于傳輸
docker save -o image_name.tar image_name
# 將鏡像壓縮包解壓為鏡像
docker load -i image_name.tar
- dockerfile構(gòu)建鏡像
Dockerfile 是一種文本文件,它包含了一系列指令和配置,用于自動化構(gòu)建 Docker 鏡像。優(yōu)點(diǎn)靈活性和可重復(fù)性。比docker commit更具優(yōu)勢。
- 可重復(fù)性:使用 Dockerfile 可以完全復(fù)制鏡像構(gòu)建過程,確保每次構(gòu)建的結(jié)果一致。
- 可擴(kuò)展性:Dockerfile 允許您定義容器的多個層次,并在每個層次上進(jìn)行構(gòu)建和修改。輕松地添加、刪除或更新組件。
- 可維護(hù)性:Dockerfile 是一個文本文件,可以與代碼存儲在同一版本控制系統(tǒng)中,并且可以通過版本控制工具進(jìn)行追蹤和管理。這使得團(tuán)隊(duì)成員可以共同協(xié)作和維護(hù)鏡像構(gòu)建過程。
容器
倉庫
倉庫可看成一個代碼控制中心,用來保存鏡像 Docker Hub(https://hub.docker.com)
dockerfile
FROM acltransformer:base # ubuntu:18.04 指定父鏡像,指定dockerfile基于哪個鏡像進(jìn)行創(chuàng)建以華為昇騰172.16.15服務(wù)器為例RUN apt-get update && apt-get install -y \ # 執(zhí)行命令wget \language-pack-zh-hans && \mkdir /dataWORKDIR /data # 工作目錄
COPY Dockerfile_dir ./Dockerfile_dir # 復(fù)制文件 這是個文件夾WORKDIR /data/Dockerfile_dir/npu_tools
RUN /bin/bash Miniconda3-latest-Linux-aarch64.sh -b -p /opt/conda && \echo 'export PATH="/opt/conda/bin:$PATH"' >> ~/.bashrc && \RUN conda create -n py37 python=3.7
ENV PATH /opt/conda/envs/chatglm_py37/bin:$PATH # 環(huán)境變量RUN /bin/bash npu_env.sh && \pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simpleENTRYPOINT ["/bin/bash", "-c", "/opt/conda/envs/py37/bin/python3.7 main.py"] # 設(shè)置容器的入口點(diǎn)
在編寫 Dockerfile 時,通常會遵循一個原則:盡可能使步驟少而有效。
- 減小鏡像大小:每個步驟都會在鏡像中創(chuàng)建一個新的層次,并增加鏡像的大小。較少的步驟意味著較少的層次,從而減小了鏡像的總體大小。
- 提高構(gòu)建速度:每個步驟都需要執(zhí)行一些操作,較少的步驟意味著較少的操作,從而減少了構(gòu)建過程的時間。
- 簡化維護(hù)和調(diào)試:較少的步驟意味著較少的代碼和配置,使得維護(hù)和調(diào)試變得更加簡單。
使用下面命令來用dockerfile創(chuàng)建docker鏡像。
docker build -t chatglm_npu:v2 -f Dockerfile .
docker build --platform linux/arm64/v8 -t chatglm_npu:v1 -f Dockerfile .
docker build --platform linux/amd64 -t dispatch:v1 -f Dockerfile .