:::info 所需:Linux系統、Nvidia GPU 實驗室使用的系統為Ubuntu 20.04 教學是針對具有Nvidia GPU的電腦進行教學 1. 虛擬環境 2. CUDA&Pytorch 建立虛擬環境,較簡單可直接操作。 後者較為複雜,需與BBB影片一起服用。 教學影片時間軸(歡迎使用兩倍速觀看): 00:00~09:00 基礎虛擬環境建設 09:00~17:00 CUDA不同版本安裝(大學部可跳過) 17:00~24:00 Pytorch安裝 ::: --- # 環境的建立 ### WHY? :::success 為什麼需要使用環境? ::: * 不同專案內使用的套件不盡相同,而各個套件所須要的相依項也不一定相同。 * 如果將所有套件安裝在全域環境中,容易引發衝突和問題。 * 更好的控管專題內的套件,在團隊專案中會能夠更好的完成統一標準及環境部屬。 ### WHICH? :::success 選擇何種環境管理工具? * Virtualenv: 簡單靈活,但不處理套件相依的管理。 * Conda: 支援跨語言相依行處理,但可能過於龐大。 * Poetry: 較新且功能強大,但學習曲線略陡。 * Pipenv: 集成套件相容和虛擬環境管理,但有時可能會遇到相容性解析問題。 ::: * 本章將使用pipenv完成環境的架設。 * Pipenv 將套件管理集中在 Pipfile 和 Pipfile.lock 中,使專案套件的版本控制較容易。 * Pipenv 可以自動解析套件的相依關係,並安裝/刪除相應的版本,減少手動安裝和配置的麻煩。 ### WHAT? :::success 什麼是Pipfile&Pipfile.lock? ::: :::info 簡單而言就是將requirements.txt拆分成兩個部份 * Pipfile 主要用來描述你的專案套件及其版本範圍 * 允許指定版本範圍,而不是僅僅固定版本,提供了更多的靈活性。 * Pipfile.lock 用來記錄 Pipfile 中指定的套件的確切版本hashes。 * 這樣可以確保所有環境中的套件版本一致,並保護套件不被修改。 * 且隨著每次套件安裝或更新而自動更新,確保每次安裝的一致性。 ::: #### 內容 * Pipfile: [packages]:指定的套件。 [dev-packages]:指定開發時需要的套件,例如測試框架或工具。 [sources]:指定套件的來源。 [requires]:指定 Python 的版本要求。 * Pipfile.lock: default:列出 Pipfile 中 packages 部分的套件及其具體版本。 develop:列出 Pipfile 中 dev-packages 部分的套件及其具體版本。 hashes:包含每個相依套件的雜湊值,用來驗證下載的套件是否被篡改。 ### HOW? :::success 如何使用Pipenv? ::: :::danger 注意:不同資料夾不同專案,請不要混用 ::: 1. 安裝pipenv ```bash= pip3 install pipenv ``` 2. 環境建立 ```bash= cd Desktop/project_tmp pipenv install # 使用預設的python版本創建虛擬環境 # pipenv install --python <version> # 創建指定 Python 版本的虛擬環境 "版本問題提醒" # 例如 pipenv install --python 3.8 會使用 Python 3.8 建立虛擬環境。 ``` >先進入專案中的資料夾,再進行環境的建立。 >建立一個新的虛擬環境並安裝 Pipfile 中指定的所有套件。 >如果沒有 Pipfile,則會自動生成一個新的 Pipfile。 3. 進入環境 ```bash= pipenv shell # 啟動專案的虛擬環境,進入該虛擬環境的 shell 中。 ``` * 進入環境後前面會有你資料夾名稱,也是該環境的名稱  4. 安裝套件 ```bash= pipenv install package_name # pipenv install -r requirements.txt # 利用requirements.txt 安裝 ``` >安裝你所需的套件,並將其加入到 Pipfile 中。如果沒指定版本,會安裝最新的版本。 5. 使用環境  >在核心選擇中,選擇剛剛建立的虛擬環境核心,並開始使用 >名字會與剛剛建立相同 6. 離開環境 ```bash= exit # 退出虛擬環境的 shell。 ``` 7. 刪除環境 ```bash= pipenv --rm # 刪除環境 ``` ### CMD * 此部份為其餘較常用到的指令 ##### 查看和更新套件 ```bash= pipenv graph # 查看目前安裝的套件及其相依樹,以圖形的方式顯示套件之間的關係。 pipenv update # 更新所有套件到 Pipfile 中指定的最新可用版本,並同步更新 Pipfile.lock。 pipenv update <package> # 更新指定的套件到最新版本,並同步更新 Pipfile.lock。 pipenv lock # 鎖定 Pipfile 中的套件版本並生成 Pipfile.lock,確保其他環境中可以安裝相同版本的套件。 ``` ##### 檢查與清理 ```bash= pipenv check # 透過檢查已安裝的套件是否有安全漏洞,來確保專案的安全性。 pipenv clean # 清除所有已安裝但不再被 Pipfile 需要的套件。 ``` ##### 移除與同步 ```bash= pipenv uninstall <package> # 移除指定的套件,並同步更新 Pipfile 和 Pipfile.lock。 pipenv sync # 根據 Pipfile.lock 中的鎖定套件,將當前環境同步,確保套件版本一致。 ``` ##### 環境外運行 ```bash= pipenv run <command> # 在虛擬環境內運行指定的指令,無需進入 shell,例如 pipenv run python app.py。 ``` --- # GPU的使用 ### INFO :::warning * Pytorch是建立在CUDA上的,所以會有版本相容性問題 * 這邊的安裝CUDA,是示範如果需更換CUDA版本(可跳過) * 這邊使用[CUDA 11.8](https://developer.nvidia.com/cuda-11-8-0-download-archive?target_os=Linux)做更換版本說明。 * [Pytorch官網](https://pytorch.org) ::: ### FLOW :::success ### 確認CUDA版本 -> 選擇Pytorch版本 * nvcc -V 查看CUDA版本  * 用以確認Pytorch版本,更早之前的版本[在這裡](https://pytorch.org/get-started/previous-versions/)  ::: --- ### CUDA * 此部份為變更CUDA的安裝&路徑更改(可跳過) #### CUDA安裝 >避免覆蓋掉原本CUDA請選擇runfile,並根據官網下面的步驟安裝。 > > ```bash= wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run chmod +x cuda_11.8.0_520.61.05_linux.run # ls -l 如果沒有x,需幫他加上可執行的權限 sudo sh cuda_11.8.0_520.61.05_linux.run ``` #### 修改PATH&重新連接 ```bash= echo 'export PATH=/usr/local/cuda-11.8/bin:$PATH' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc # 修改PATH sudo rm /usr/local/cuda sudo ln -s /usr/local/cuda-11.8 /usr/local/cuda # 重新軟連結cuda ``` #### 完成後確認版本 ```bash= nvcc --version # 重新確認版本 ``` --- ### Pytorch * 無法透過pipenv install pytorch 直接安裝 * 較建議透過Solution 2 解決 #### Solution 1 * 透過 pipenv run pip 進行安裝,但Pipfile不會更新 * 不需要更新Pipfile,速度較快 ```bash= pipenv run pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 ``` #### Solution 2 * 修改Pipfile內的source與packages,再使用pipenv install進行安裝。 * 在[先前版本](https://pytorch.org/get-started/previous-versions/)中確認torch,torchvision,torchaudio版本,並修改到[packages]中對應位置。  * 下圖為需手動新增到Pipfile的部份 ``` [[source]] name = "pytorch" url = "https://download.pytorch.org/whl/cu118" verify_ssl = true [packages] torch = {index = "pytorch", version = "==2.4.0"} torchvision = {index = "pytorch", version = "==0.19.0"} torchaudio = {index = "pytorch", version = "==2.4.0"} ``` * 修改完並安裝 ```bash= pipenv install # 會依照Pipfile下載相依項 ``` * 使用graph檢查 ```bash= pipenv graph # 檢查是否有正確安裝 ``` ### TEST * 使用以下程式確認是否能連接並使用GPU ```python= import torch if torch.cuda.is_available(): print(f"CUDA version: {torch.version.cuda}") print(f"cuDNN version: {torch.backends.cudnn.version()}") print(f"Number of GPUs: {torch.cuda.device_count()}") else: print("CUDA is not available.") ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up