境配置:從零搭建深度學(xué)習(xí)開發(fā)環(huán)境)
1. 為什么需要為PyTorch配置專屬Jupyter環(huán)境在深度學(xué)習(xí)項(xiàng)目開發(fā)中環(huán)境配置往往是第一個攔路虎。我見過太多新手在安裝PyTorch時(shí)直接pip install torch結(jié)果在Jupyter Notebook里導(dǎo)入時(shí)才發(fā)現(xiàn)CUDA不可用白白浪費(fèi)了顯卡算力。更糟的情況是不同項(xiàng)目對PyTorch版本要求不同全局安裝的版本可能導(dǎo)致兼容性問題。通過Conda創(chuàng)建獨(dú)立環(huán)境能完美解決這些問題。我的工作流通常是每個PyTorch項(xiàng)目單獨(dú)創(chuàng)建conda環(huán)境 - 安裝指定版本的PyTorch和依賴 - 配置專屬的Jupyter內(nèi)核。這樣既能隔離不同項(xiàng)目的依賴沖突又能確保GPU加速可用。實(shí)測下來相比直接使用基礎(chǔ)環(huán)境這種方式的開發(fā)效率提升顯著。重要提示永遠(yuǎn)不要在base環(huán)境中直接安裝PyTorch這可能導(dǎo)致Anaconda自身的包依賴混亂。2. 環(huán)境準(zhǔn)備與工具選型2.1 硬件需求檢查首先確認(rèn)你的硬件配置是否支持GPU加速nvidia-smi # 查看顯卡型號和驅(qū)動版本輸出示例----------------------------------------------------------------------------- | NVIDIA-SMI 525.85.12 Driver Version: 525.85.12 CUDA Version: 12.0 | |--------------------------------------------------------------------------- | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | || | 0 NVIDIA RTX 3060 On | 00000000:01:00.0 On | N/A | | 0% 45C P8 15W / 170W | 682MiB / 12288MiB | 0% Default | ---------------------------------------------------------------------------關(guān)鍵信息驅(qū)動版本525.85.12CUDA Version12.0這是驅(qū)動支持的最高CUDA版本常見坑點(diǎn)CUDA有兩個版本號 - 驅(qū)動支持的CUDA版本上例中的12.0和實(shí)際安裝的CUDA Toolkit版本。PyTorch需要后者匹配。2.2 軟件工具選擇我的推薦工具鏈組合包管理Miniconda比Anaconda更輕量Python版本3.8-3.10PyTorch對3.11支持尚不完善CUDA Toolkit根據(jù)PyTorch官方推薦版本選擇Jupyter最新版即可3. 一步步搭建PyTorch環(huán)境3.1 安裝Miniconda下載適合你系統(tǒng)的Miniconda安裝包推薦Python 3.9版本wget https://repo.anaconda.com/miniconda/Miniconda3-py39_23.3.1-0-Linux-x86_64.sh bash Miniconda3-py39_23.3.1-0-Linux-x86_64.sh安裝完成后初始化source ~/.bashrc conda init驗(yàn)證安裝conda --version # 應(yīng)顯示類似 conda 23.3.13.2 創(chuàng)建專屬環(huán)境新建名為pytorch_env的環(huán)境Python 3.9conda create -n pytorch_env python3.9 conda activate pytorch_env3.3 安裝PyTorch with CUDA訪問PyTorch官網(wǎng)獲取安裝命令https://pytorch.org/get-started/locally/以CUDA 11.7為例conda install pytorch torchvision torchaudio pytorch-cuda11.7 -c pytorch -c nvidia安裝后驗(yàn)證import torch print(torch.__version__) # 如 2.0.1 print(torch.cuda.is_available()) # 應(yīng)為True print(torch.cuda.get_device_name(0)) # 顯示你的顯卡型號3.4 解決常見安裝問題問題1CUDA error: no kernel image is available for execution原因PyTorch版本與顯卡算力不兼容解決方案查看顯卡算力如RTX 3060為8.6安裝支持該算力的PyTorch版本問題2Existing package manager installation of the driver found這是警告不是錯誤可忽略徹底解決需卸載系統(tǒng)自帶NVIDIA驅(qū)動但通常不建議4. 配置Jupyter Notebook內(nèi)核4.1 安裝Jupyter在激活的環(huán)境中conda install jupyter4.2 添加內(nèi)核到Jupyterpython -m ipykernel install --user --name pytorch_env --display-name PyTorch (CUDA)驗(yàn)證jupyter kernelspec list應(yīng)看到類似輸出Available kernels: pytorch_env /home/user/.local/share/jupyter/kernels/pytorch_env python3 /usr/local/share/jupyter/kernels/python34.3 啟動Jupyterjupyter notebook在新建筆記本時(shí)選擇PyTorch (CUDA)內(nèi)核即可。5. 環(huán)境優(yōu)化與實(shí)用技巧5.1 加速conda操作修改~/.condarc配置channels: - pytorch - nvidia - conda-forge - defaults channel_priority: strict auto_update_conda: false5.2 環(huán)境導(dǎo)出與共享導(dǎo)出環(huán)境配置conda env export environment.yml其他人可通過以下命令復(fù)現(xiàn)環(huán)境conda env create -f environment.yml5.3 多版本CUDA管理如果需要同時(shí)支持多個CUDA版本conda install -c nvidia cuda-toolkit11.7 # 安裝特定版本 conda install -c nvidia cuda-toolkit12.1通過環(huán)境變量切換export CUDA_HOME/usr/local/cuda-11.76. 深度優(yōu)化配置6.1 內(nèi)存使用監(jiān)控在Notebook中添加常駐監(jiān)控import torch from IPython.display import display, HTML def gpu_mem(): t torch.cuda.get_device_properties(0).total_memory / 1e9 r torch.cuda.memory_reserved(0) / 1e9 a torch.cuda.memory_allocated(0) / 1e9 return fTotal: {t:.2f}G | Reserved: {r:.2f}G | Allocated: {a:.2f}G display(HTML(div idmem/div)) _ %javascript setInterval(function(){ var kernel IPython.notebook.kernel; kernel.execute(gpu_mem(), { iopub: { output: function(out){ document.getElementById(mem).innerHTML out.content.data[text/plain]; } } }); }, 1000);6.2 自動環(huán)境檢查在Notebook開頭添加import sys import subprocess def check_env(): # 檢查Python版本 assert sys.version_info (3,8), f需要Python 3.8當(dāng)前是{sys.version} # 檢查PyTorch和CUDA import torch assert torch.cuda.is_available(), CUDA不可用 # 檢查關(guān)鍵包版本 requirements { torch: 1.13.0, torchvision: 0.14.0 } for pkg, ver in requirements.items(): installed subprocess.check_output( [sys.executable, -m, pip, show, pkg] ).decode(utf-8) assert ver in installed, f{pkg}需要版本{ver} check_env()7. 離線環(huán)境配置方案對于無法聯(lián)網(wǎng)的機(jī)器可提前下載好所有包在有網(wǎng)絡(luò)的機(jī)器上conda create -n pytorch_env --download-only python3.9 pytorch torchvision torchaudio pytorch-cuda11.7 -c pytorch -c nvidia這會下載所有包到pkgs目錄拷貝整個pkgs文件夾到目標(biāo)機(jī)器。在目標(biāo)機(jī)器上conda create -n pytorch_env --offline python3.9 pytorch torchvision torchaudio pytorch-cuda11.78. 環(huán)境維護(hù)與清理定期清理無用包c(diǎn)onda clean --all刪除舊環(huán)境conda env remove -n pytorch_env更新所有包c(diǎn)onda update --all9. 性能測試與驗(yàn)證在Notebook中運(yùn)行以下測試代碼import torch import time device torch.device(cuda if torch.cuda.is_available() else cpu) print(fUsing device: {device}) # 矩陣乘法測試 size 1024 a torch.randn(size, size, devicedevice) b torch.randn(size, size, devicedevice) start time.time() _ torch.matmul(a, b) print(fCUDA matmul time: {(time.time()-start)*1000:.2f}ms) # 對比CPU a_cpu a.cpu() b_cpu b.cpu() start time.time() _ torch.matmul(a_cpu, b_cpu) print(fCPU matmul time: {(time.time()-start)*1000:.2f}ms)預(yù)期結(jié)果應(yīng)該是CUDA比CPU快10-50倍不等具體取決于你的硬件配置。