容器鏡像的構建和調試指南
構建鏡像:
1.寫一個Dockerfile,參考:
FROM swr.cn-north-4.myhuaweicloud.com/modelarts-job-dev-image/custom-cpu-base:1.0 # setup the env that you need when running a container ENV PYTHON_PATH=/mypath/:$PYTHON_PATH # copy local files (code, packages, or data) into container images COPY install/ /home/work/install/ # run shell comment to install packages or setting up configs RUN cd /home/work/install && pip install -r requirements.txt --no-cache-dir && \ cd /home/work/install/obs_sdk/src && python setup.py install
2.把要打到基礎鏡像的依賴包跟Dockerfile放在同一目錄,cd到這個目錄,執行打鏡像命令:
docker build -t my_deeplearning_image:v1 .
啟動容器:
('-d'參數標示后臺啟動,不用再新起窗口執行)
docker run -ti -d my_deeplearning_image:v1
如果在調試中需要用到GPU設備,建議使用nvidia-docker來啟動。nvidia-docker的安裝和使用教程參考鏈接:https://blog.csdn.net/zywvvd/article/details/110647382
進入容器:(一般會另起一個窗口,在debug時使用)
1.獲取容器ID:
通過命令查看CONTAINER ID ,命令如:
docker ps
結果如:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 39c9ceedb1f6 my_deeplearning_image:v1 "bash" About a minute ago Up About a minute happy_meitner
2.進入容器內部
使用以下命令可進入容器內部(使用container ID)
docker exec -it 39c9ceedb1f6 /bin/bash
進入容器后,就類似通過ssh登陸了一個linux機器,可以查看所需的文件是否在正確位置,是否有正確權限。
本地調試要點:
0.確認對應的腳本、代碼、流程在linux服務器上運行正常。
如果在linux服務器上運行就有問題,那么先調通以后再做容器鏡像。
1.確認打入鏡像的文件是否在正確的位置,是否有正確的權限。
訓練場景主要看一下自研的依賴包是否正常,看一下pip list是否包含所需的包,看一下容器直接調用的python是否是自己所需要的那個(如果容器鏡像裝了多個python,需要設置python路徑的環境變量)。
推理場景主要看一下模型包位置是否正確,看一下python相關是否正確。
2.測試訓練啟動腳本
2.1優先使用手工進行數據拷貝的工作并驗證
一般在鏡像里不包含訓練所用的數據和代碼,所以在啟動鏡像以后需要手工把需要的文件拷貝進去。建議數據、代碼和中間數據都放到"/cache"目錄,防止正式運行時磁盤占滿。建議linux服務器申請的時候,有足夠大的內存(8G以上)以及足夠大的硬盤(100G以上)。
docker和linux的文件交互命令如下:
docker cp data/ 39c9ceedb1f6:/cache/
數據準備完成后,啟動訓練的腳本,查看訓練是否能夠正常拉起。一般來說,啟動腳本為:
cd /cache/code/ python start_train.py
如果訓練流程不符合預期,可以在容器實例中查看日志、錯誤等,并進行代碼、環境變量的修正。
2.2然后預制腳本測試整體流程
一般使用run.sh封裝訓練外的文件拷貝工作(數據、代碼:OBS-->容器,輸出結果:容器-->OBS),run.sh的構建方法參考之前的博客:https://bbs.huaweicloud.com/blogs/281792
如果預制腳本調用結果不符合預期,可以在容器實例中進行修改和迭代。
3.分析錯誤時:訓練鏡像先看日志,推理鏡像先看API的返回。
可以用過命令查看容器輸出到stdout的所有日志:
docker logs -f 39c9ceedb1f6
一般在做推理鏡像時,部分日志是直接存儲在容器內部的,所以需要進入容器看日志。注意:重點對應日志中是否有ERROR(包括,容器啟動時、API執行時)。
4.牽扯部分文件用戶組不一致的情況,可以在宿主機用root權限執行命令進行修改
docker exec -u root:root 39c9ceedb1f6 bash -c "chown -R ma-user:ma-user /cache"
5.針對調試中遇到的錯誤,需要持久化到容器構建流程,并重新測試。
上傳鏡像:
完成調試后,需要上傳基礎鏡像到SWR
1.登陸SWR,login的賬號密碼可在SWR頁面的客戶端上傳指導時生成。
其他賬號創建方法:獲取長期login指令
2.創建自己的組織(僅需要創建一次)
3.上傳鏡像(認為${image_name}:${image_version}是剛做好的基礎鏡像)
先打tag,然后push。注意,第一次使用需要在SWR先創建一個組織,詳細參考SWR文檔:https://support.huaweicloud.com/usermanual-swr/swr_01_0014.html
docker tag ${image_name}:${image_version} swr.cn-north-4.myhuaweicloud.com/${organization_name}/${image_name}:${image_version} docker push swr.cn-north-4.myhuaweicloud.com/${organization_name}/${image_name}:${image_version}
4.在SWR頁面確認基礎鏡像已正常上傳
遠程調試要點:
1.直接使用對應鏡像創建訓練任務即可
2.觀察訓練任務是否正常執行
主要觀察日志是否正常,然后看一下整個任務是否能夠正常產出結果。
3.針對觀察發現的問題,增加相關信息打印
可以通過在鏡像里修改run.sh(重新構建鏡像),或者在運行命令里用sed修改run.sh,或者通過增加“env”命令來查看容器環境信息。
如果輸入輸出的邏輯不是很確認,可以先把樣例的數據和代碼放到鏡像里,先看一看整個訓練流程是否可以正常運行。
刪除本地鏡像:
參考:https://blog.csdn.net/winy_lm/article/details/77980529
1.查看是否有對應容器
docker ps -a
2.停止對應容器
docker stop ${container_id}
3.刪除對應容器
docker rm ${container_id}
4.刪除對應鏡像
docker rmi ${image_id}
鏡像到導出和導入:
如果需要進行鏡像的離線遷移,需要用到鏡像的導出和導入的功能。
用save保存鏡像,用load導入:
docker save ${image_name}:${image_version} > my_deeplearning_image.1.0.tar docker load -i my_deeplearning_image.1.0.tar
用export保存container
docker export ${container_id} > my_deeplearning_image.export.tar
AI開發平臺ModelArts 容器 容器鏡像服務 SWR
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。