docker打包本地conda虛擬環(huán)境并遠程部署的詳細過程
由于我的實驗代碼在某些數(shù)據(jù)集上經(jīng)常OOM,所以我想把本地環(huán)境直接打包為docker,以便在遠程服務器上直接運行
將本地復雜的深度學習環(huán)境(尤其是涉及 CUDA 的 GS-SLAM 項目)遷移到遠程服務器,使用 Docker 是最穩(wěn)妥的選擇。這能避免遠程服務器上驅動、庫版本不一致導致的“環(huán)境地獄”。
為了保證效率,建議遵循以下流程:構建基礎鏡像 -> 導出 Conda 環(huán)境 -> 映射代碼與數(shù)據(jù)。
第一階段:本地準備(Docker 化)
不要直接把幾百 GB 的數(shù)據(jù)打包進鏡像,這樣鏡像會臃腫且不可移植。我們只把 環(huán)境 打包。
1.導出 Conda 環(huán)境
conda activate my2dgsslam conda env export > environment.yml

將environment.yml中的pip部分復制粘貼到requirement.txt
addict appdirs argcomplete attrs backcall click comm configargparse cycler dash dash-core-components dash-html-components dash-table decorator docker-pycreds evo fastjsonschema flask fonttools gitdb gitpython glfw imageio imgviz importlib-metadata importlib-resources ipython ipywidgets itsdangerous jedi jinja2 joblib jsonschema jupyter-core jupyterlab-widgets kiwisolver lietorch lpips markdown-it-py markupsafe matplotlib matplotlib-inline mdurl munch natsort nbformat nest-asyncio open3d opencv-python packaging pandas parso pexpect pickleshare pillow pkgutil-resolve-name platformdirs plotly prompt-toolkit protobuf psutil ptyprocess pyglm pygments pyopengl pyparsing pyquaternion pyrsistent python-dateutil pytz pyyaml retrying rich ruff scikit-learn scipy seaborn sentry-sdk setproctitle smmap tenacity threadpoolctl torchmetrics traitlets trimesh wandb wcwidth werkzeug widgetsnbextension zipp
2.構建dockerfile
# 1. 基礎鏡像:Ubuntu 22.04 + CUDA 11.8 (完美支持 H20 的 sm_90 架構)
FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu22.04
# 2. 避免交互式安裝,設置時區(qū)為東八區(qū)
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Shanghai
# 3. 替換 apt 源為阿里云
RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list && \
sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
# 4. 安裝基礎依賴
RUN apt-get update && apt-get install -y \
wget curl git tzdata build-essential ninja-build \
libgl1-mesa-glx libglib2.0-0 \
&& ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime \
&& dpkg-reconfigure --frontend noninteractive tzdata \
&& rm -rf /var/lib/apt/lists/*
# 5. 安裝 Miniconda
RUN wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /tmp/miniconda.sh && \
bash /tmp/miniconda.sh -b -p /opt/conda && \
rm /tmp/miniconda.sh
ENV PATH=/opt/conda/bin:$PATH
# 6. 配置 Conda 和 Pip 國內源
RUN conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ && \
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ && \
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
WORKDIR /workspace
#接受tos條款
RUN conda tos accept
# 7. 創(chuàng)建 Python 3.9 純凈環(huán)境
RUN conda create -n 2dgsslam python=3.9 -y && \
conda clean -afy
RUN echo "source /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc && \
echo "conda activate 2dgsslam" >> ~/.bashrc
# 8. 核心步驟:顯式安裝 PyTorch 2.1.2 (cu118 版本)
RUN /bin/bash -c "source /opt/conda/etc/profile.d/conda.sh && conda activate 2dgsslam && \
pip install torch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 --index-url https://download.pytorch.org/whl/cu118"
# 9. 復制并安裝其他第三方庫 (僅復制依賴文件,不包含項目代碼)
COPY requirements.txt .
RUN /bin/bash -c "source /opt/conda/etc/profile.d/conda.sh && conda activate 2dgsslam && \
pip install -r requirements.txt"
# 10. H20 算力架構聲明 (sm_90)
# 雖然這里不編譯,但設置這個環(huán)境變量可以確保后續(xù)你手動編譯時,nvcc 編譯器直接生成 H20 的原生機器碼
ENV TORCH_CUDA_ARCH_LIST="9.0"
# 默認啟動 bash
CMD ["/bin/bash"]3.構建docker鏡像
我們構建docker時不是用代理,取消一下代理設置
ls /etc/systemd/system/docker.service.d/
刪除
ls /etc/systemd/system/docker.service.d/
刪除文件前可以備份,請刪除以下文件
http-proxy.conf https-proxy.conf
sudo rm -rf /etc/systemd/system/docker.service.d/*
查看配置文件
cat /etc/docker/daemon.json
修改daemon.json為以下內容,注釋或刪除關于proxy的命令
{
"runtimes": {
"nvidia": {
"args": [],
"path": "nvidia-container-runtime"
}
},
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://mirror.aliyuncs.com"
]
}重載 systemd + 重啟 Docker
sudo systemctl daemon-reexec sudo systemctl daemon-reload sudo systemctl restart docker
確認代理真的消失
docker info | grep -i proxy
無任何輸出
接下來構建docker
docker build -t 2dgsslam_base:v1 .

測試一下
先驗證 GPU 是否可用(非常重要)
運行容器:
sudo docker run --gpus all -it 2dgsslam_base:v1
進入后測試:
nvidia-smi
測試 PyTorch GPU
在容器里:
import torch print(torch.cuda.is_available()) print(torch.cuda.get_device_name(0))
正常輸出應該是:
True
NVIDIA H20 / A100 / etc.
第二階段:保存docker鏡像上傳到遠程服務器
先將鏡像導出為tar文件
docker save -o 2dgsslam_base_v1.tar 2dgsslam_base:v1

目前遠程服務器只接收tar.gz 壓縮包
要將 Docker 鏡像保存為 tar.gz 壓縮包,核心是先將鏡像導出為 tar 文件,再用壓縮工具打包成 tar.gz
查看要保存的鏡像名稱 / ID
先確認鏡像的準確標識(名稱 + 標簽 或 ID)
docker images

將 tar 壓縮為 tar.gz
用 gzip 命令壓縮(壓縮后體積更小,便于傳輸 / 存儲):
# 格式:gzip 要壓縮的tar文件 gzip my_image.tar # 執(zhí)行后會生成 my_image.tar.gz,原 tar 文件會被刪除 # 若想保留原 tar 文件,加 -k 參數(shù):gzip -k my_image.tar
文件權限不夠,導致無法上傳至遠程服務器
-rw------- 1 root root 12400622118 Mar 21 13:03 2dgsslam_base_v1.tar.gz
修改文件權限
sudo chmod 644 2dgsslam_base_v1.tar.gz
使用sftp連接服務器
sftp 用戶名@yourIP
上傳鏡像
put -r 本地文件路徑 遠程路徑
鏡像已經(jīng)上傳到服務器上

在服務器網(wǎng)頁控制頁面導入鏡像


導入完成
第三階段:掛載項目目錄運行
在服務器控制頁面創(chuàng)建開發(fā)環(huán)境選擇剛剛導入的鏡像



啟動命令
sudo docker run --gpus all -it -v /服務器上項目路徑/SA-GS-SLAM:/workspace 2dgsslam_base:v1
cd /workspace
第四階段:vscode遠程連接
ssh連接遠程服務器docker



到此這篇關于docker打包本地conda虛擬環(huán)境并遠程部署的文章就介紹到這了,更多相關docker打包本地conda虛擬環(huán)境內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
docker打包本地conda虛擬環(huán)境并遠程部署的詳細過程
這篇文章給大家介紹docker打包本地conda虛擬環(huán)境并遠程部署的詳細過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2026-03-03
使用Docker Compose創(chuàng)建LAMP環(huán)境的詳細步驟
現(xiàn)如今,通過 Docker 容器化部署環(huán)境已經(jīng)逐漸成為主流,特別是在部署像 LAMP 這樣的復雜環(huán)境時,本教程旨在帶您完成使用 Docker-Compose 建立 LAMP 環(huán)境的整個過程,同時還包括定制 PHP 環(huán)境的步驟,需要的朋友可以參考下2024-12-12
docker鏡像倉庫hub.docker.com無法訪問的解決方法
最近許多群友都詢問為什么無法訪問Docker鏡像倉庫,本文就來介紹一下docker鏡像倉庫hub.docker.com無法訪問的解決方法,感興趣的可以了解一下2023-08-08
docker-compose部署nacos 2.2.3的詳細過程
這篇文章主要介紹了docker-compose部署nacos 2.2.3的詳細過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-11-11

