前言
官方的安裝說明:
官方的安裝說明
安裝前,請確認安裝的硬件:
- CPU with 8 cores
- 16GB RAM
- [Optional] NVIDIA GPU (4GB RAM)
滿足需求
1. 安裝軟件依賴
這一步主要是安裝三個軟件:
- Docker
- NVIDIA Container Toolkit (preferred)
- NVIDIA CUDA 12 compatible GPU Driver (preferred)
1.1 ??安裝 Docker??
步驟:
卸載舊版本(若有):
sudo apt-get remove docker docker-engine docker.io containerd runc
安裝依賴工具:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
添加 Docker 官方 GPG 密鑰和倉庫:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安裝 Docker Engine:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
將用戶加入 docker 組(避免每次用 sudo):
sudo usermod -aG docker $USER
newgrp docker ?# 刷新當前會話
? 驗證 Docker 安裝:
docker run --rm hello-world
??成功標志??:輸出 Hello from Docker! 及相關信息。
1.2???安裝 NVIDIA GPU 驅動(CUDA 12 兼容版本)??
?
步驟:
查看推薦驅動版本:
ubuntu-drivers list
安裝支持 ??CUDA 12?? 的驅動(如 nvidia-driver-535):
sudo apt install nvidia-driver-535
注:具體版本需參考 NVIDIA 官網。驅動版本 ≥525.60.13 通常兼容 CUDA 12。
重啟系統:
sudo reboot
? 驗證驅動安裝:
nvidia-smi
??成功標志??:
輸出 GPU 信息表格。
頂部顯示 CUDA Version: 12.x(表示驅動兼容 CUDA 12)。
1.3???安裝 NVIDIA Container Toolkit?
?
步驟:
-
添加倉庫和密鑰:
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
- 安裝工具包:
sudo apt-get update sudo apt-get install -y nvidia-container-toolkit
- 重啟 Docker:
sudo systemctl restart docker
? 驗證 NVIDIA Container Toolkit:
docker run --rm --gpus all nvidia/cuda:11.0.3-base nvidia-smi
- ??成功標志??:輸出與宿主機相同的?
nvidia-smi
?表格(GPU 訪問正常)。
最后一步,驗證不成功,類似于下面的錯誤,
錯誤原因是docker沒有辦法連接網絡,修改如下:
1. 確保自己能科學上網,并有代理的連接
2. 修改docker的服務器鏈接,如果沒有文件就新建一個文件,確保/etc/docker/daemon.json,如下圖所示。
具體的內容:
{
? ? "registry-mirrors": [
? ? "https://docker.nju.edu.cn",
? ? "https://do.nark.eu.org",
? ? "https://dockerproxy.com",
? ? "https://docker.mirrors.sjtug.sjtu.edu.cn",
? ? "https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com",
? ? "https://docker.m.daocloud.io",
? ? "https://hub-mirror.c.163.com",
? ? "https://mirror.baidubce.com",
? ? "https://dockerhub.icu",
? ? "https://docker.registry.cyou",
? ? "https://docker-cf.registry.cyou",
? ? "https://dockercf.jsdelivr.fyi",
? ? "https://docker.jsdelivr.fyi",
? ? "https://dockertest.jsdelivr.fyi",
? ? "https://mirror.aliyuncs.com",
? ? "https://dockerproxy.com",
? ? "https://mirror.baidubce.com",
? ? "https://docker.m.daocloud.io",
? ? "https://docker.nju.edu.cn",
? ? "https://docker.mirrors.sjtug.sjtu.edu.cn",
? ? "https://docker.mirrors.ustc.edu.cn",
? ? "https://mirror.iscas.ac.cn",
? ? "https://docker.rainbond.cc"
? ? ]
}
?
3. 新建docker代理
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF
[Service]
Environment="HTTP_PROXY=http://<代理IP>:<端口>"
Environment="HTTPS_PROXY=http://<代理IP>:<端口>"
EOF
sudo systemctl daemon-reload && sudo systemctl restart docker
注意:這個時候需要代理(科學上網),最終結果如下圖所示。
4.?修復GPG密鑰與倉庫配置
??重新添加Docker官方GPG密鑰??
密鑰過期會導致倉庫驗證失敗:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
??修正倉庫地址格式??
確保路徑包含 signed-by 參數(Ubuntu 22.04+必需):
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
做完上面的事情后,使用下面兩個命令,進行測試,確保docker工作正常
docker pull nginx:latest
docker pull ubuntu:latest
如果上面的兩個命令,可以,但是
docker run --rm --gpus all nvidia/cuda:11.0.3-base nvidia-smi
還是不可以的話,很有可能是網絡問題,換個時間,換個網絡試試。我出現了上面的問題,晚上能拉取Nginx和Ubuntu,但是就是不能拉取nvidia的鏡像。第二天,中午,就可以了,可能是代理服務器換了代理。
最終成功的結果,如下圖所示。
2. 拉取鏡像
2.1 總體思路
直接在國內拉取鏡像是不能完成的,由于網絡原因,即使是能科學*上*網,也是不行的。因此,需要借助國內的云服務商提供的服務,先把鏡像拉到國內云服務商上,然后,再從云服務商上拉取鏡像。
為了在云服務商商拉取鏡像,就需要先在GitHub上建一個倉庫,并在GitHub倉庫上創建一個Dockefile文件,便可以,下面進行具體的說明。
說明:
1. 上面的說法是再測試前給出的思路,以上思路整體做完后,騰訊云還是不能從autoware官網拉取其官網的docker鏡像;
2. 最終的解決方案還是直接從docker鏡像的官網拉取鏡像,詳見2.3節最后部分及2.4節
2.2 建立GitHub倉庫
在GitHub上新建一個倉庫,如下圖所示,點擊New。
選擇公用倉庫,其它默認。
點擊創建倉庫,根據GitHub給出的命令,在本地創建git倉庫,并同步到GitHub,具體操作流程,參考下圖。
注意:在該倉庫中,就只有一個文件,放置的是Dockerfile,內容是根據海外dock的文件位置,構建自己Dock的地址。
如:構建autoware的鏡像,則:
FROM ghcr.io/autowarefoundation/autoware:universe-devel-cuda
2.3 建立騰訊云容器鏡像服務
登錄騰訊云后,在控制臺檢索“鏡像”,進入容器鏡像服務,首先,新建命名空間。新建命名空間的時候,一定要注意,一定要選擇北美的地理位置,我在阿里上選了新加坡,結果構建不成功。而且阿里只有一次選擇地理位置的機會,所以,沒有辦法才切換到騰訊云。
然后,新建一個倉庫
點擊倉庫名,選擇鏡像構建,點擊“新建鏡像構建規則”,選擇GitHub,填寫GitHub代碼倉庫,選擇分支,填寫版本規則(名字自己取),后面的分支標簽,更新時間,commit號打上√
點擊立即構建
指定分支
等待構建完成。需要很長時間,耐心等待。
鏡像構建成功后如上圖所示。
注意:
1. 上面的日志有一部分是邊做邊截圖的,不一定完善,只作為參考。
2. 經過我的驗證,autoware官網的docker還是無法拉取,以上拉取成功的是從docker官網拉取的。
3. docker官網并沒有官方autoware鏡像,因此,只能拉取其它作者建立的修改后的鏡像;
autoware的檢索結果
最終拉取的dock鏡像
上面的dock鏡像的官網:
Running Multiple Autoware-Powered Vehicles in Carla using Zenoh - Autoware
這個鏡像應該是比官網的鏡像更加符合研究者的需求,集合了autoware和模擬器carla,并且可以是多車控制的。
2.4 拉取鏡像
從騰訊云拉取,參考倉庫的快捷指令即可。
本文檔最終還是沒有從騰訊云拉取鏡像,而是直接通過科學**上網,從docker官網拉取了相應的鏡像,如下圖所示。
代碼如下:
docker pull 2256906828/zenoh_autoware:0.3.0
總結
由于網絡原因,很難從外網拉取鏡像,本文描述了,如何通過國內的云中轉拉取鏡像的方法。實際測試的效果是,autoware官方的鏡像很難拉取,即使通過海外云也不行。所以,拉取autoware鏡像的方法,還是從docker鏡像官網,下載修改過的鏡像。如果從docker官網下載,多重復幾次拉取,基本都可以的,也無須使用云進行中轉。雖然,通過云中轉在本文中拉取autoware是不需要的,但是,也是一種docker拉取的方法,作為記錄保留在本文檔