如何在 VPS 上部署深度學習環境

更新於 發佈於 閱讀時間約 12 分鐘

Sponsor

非常感謝 Cloud Native Taiwan User Group 贊助 Infra Labs,讓我能夠利用 VPS 執行 inference,並且完成這篇文章。

Cloud Native Taiwan User Group 希望整合台灣雲端相關社群如 OpenStack、Kubernetes、Ceph、SDN 等,並利用 Meetup 定期在各台灣地區舉辦技術與推廣分享活動。目的是藉此群策群力來使該社團快速成長,以對台灣在雲端開源平台的貢獻,另外我們更希望該社群持有 Cloud Native 概念,並將此推廣至台灣企業、學校、政府單位等。

文章內容說明

在這篇文章中,我們會在裝有 Nvidia Tesla P4,運行 Ubuntu 20.04 的 VPS 上部署以下深度學習環境:

  • Nvidia driver: 450.80.02
  • CUDA: 11.7
  • PyTorch: 1.13.1+cu117
  • Jupyter Lab

若已有更新後版本,歡迎留言在底下分享。這篇文章會以 PyTorch 目前的要求,CUDA 11.7 為主進行安裝。

開始安裝

身為一個買不起顯卡的窮鬼,只能乖乖用實驗室的 GPU server,或是用 AWS(Amazon Web Service)GCP(Google Cloud Platform)等 cloud service 來做訓練。我以往都是使用 AWS 跑訓練和 inference,然而,很多人在 AWS 跑 deep learning 都會用 SageMaker,但我個人認為沒有到非常方便,而且價格偏高,所以都使用 EC2(Elastic Compute Cloud)的 g4dn 系列,自己架 Jupyter Lab。

AWS EC2 instance 種類。Source: GeeksforGeeks

AWS EC2 instance 種類。Source: GeeksforGeeks

然而,在 EC2 上,Nvidia 有提供已經準備好的映象檔,包含 Nvidia driver、CUDA、cuDNN 等,所以也不太需要自己準備環境,裝一下 Python、PyTorch 之類的就可以了。然而,當自己真的要部署環境時,經常被 Nvidia 的驅動搞到發瘋。(倒是也蠻奇怪的,PyTorch AMI 沒有裝好 PyTorch。)

Nvidia GPU-Optimized PyTorch AMI。Source: AWS Marketplace

Nvidia GPU-Optimized PyTorch AMI。Source: AWS Marketplace

在和 CNTUG 的郭靖前輩申請後,取得 CNTUG Infra Labs 的使用資格(以往在 CourseAPI 專案就有以開源社群身分申請),並包含 GPU 的使用資格。

CNTUG Infra Labs 是用 OpenStack 進行管理,有關 OpenStack 操作的部分內容可以參考我的偶像 Jerry Yang 部落格的相關文章。

安裝 Nvidia driver

剛開始裝的時候,我不斷嘗試用 PPA repository 和 APT 安裝,然而 PPA 和 GPG Key 一直搞不定,所以最後直接抓 .run 檔案來跑了。檔案連結是直接從 Nvidia download 抓來的,再用 wget 抓上去。

# 在開始安裝之前,先把 nouveau 停用,不然等下會一直跳 warning,最後失敗
sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
sudo bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
cat /etc/modprobe.d/blacklist-nvidia-nouveau.conf
sudo update-initramfs -u
# 先重開機一遍,確保 nouveau 停用
sudo reboot now

# 會出現 Please specify linux-headers location,所以我們直接先裝上去
sudo apt install linux-headers-5.4.0-91-generic
# 抓下 .run 檔,執行後重開機就可以了
wget https://us.download.nvidia.com/tesla/450.80.02/NVIDIA-Linux-x86_64-450.80.02.run
chmod +x NVIDIA-Linux-x86_64-450.80.02.run
sudo ./NVIDIA-Linux-x86_64-450.80.02.run
sudo reboot now

這邊建議安裝前可以先安裝 ubuntu-drivers-common 來看看 GPU 可以裝哪幾個版本(參考以下),也要到這個網站確定一下 CUDA 相容的版本。

# 安裝 ubuntu-drivers-common
sudo apt install ubuntu-drivers-common
# 檢視 GPU 及可用的 driver
ubuntu-drivers devices

接下來重新開機後,就可以用 nvidia-smi 確認一下有沒有安裝成功囉!

nvidia-smi 執行結果

nvidia-smi 執行結果

安裝 CUDA

如果根據安裝 driver 的步驟,應該也已經決定好要安裝哪個版本的 CUDA 了。這邊依照 PyTorch 最新版本(2022/12)要求的 CUDA 版本,安裝 11.7。其實各版本的安裝指令 Nvidia 都有放在這個網頁上,可以看著需求參考安裝。

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /"
sudo apt update
sudo apt install cuda
sudo apt install nvidia-cuda-toolkit

理論上,安裝完之後跑 nvcc -V 一定會被結果嚇到,因為版本好像不太對,所以版本建議裝完 PyTorch 再檢查,會比較準。

$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243

安裝 PyTorch

安裝教學的操作。Source: PyTorch 網站

安裝教學的操作。Source: PyTorch 網站

其實安裝 PyTorch 相對簡單很多,因為網站上就有提供安裝教學。只要跟著操作就可以了。

# 如果習慣打 python3 的朋友,這裡可以略過
sudo apt install python-is-python3
# 安裝 pip3
sudo apt install python3-pip
# 安裝 PyTorch
pip install torch torchvision torchaudio

安裝完成後,就可以測試一下了。

>>> import torch
>>> print(torch.version.cuda)
11.7
>>> print(torch.cuda.is_available())
True

到這邊,環境就大概完成了(我是 PyTorch 派的,Tensorflow 安裝就不寫了 XD)。剩下 Jupyter Lab 要準備了。

安裝 Jupyter Lab

在開始安裝之前,要先調整安全性群組,開一個 IPv4 TCP 在 port 8888 的 0.0.0.0/0 inbound rule,讓我們的 Jupyter Lab 可以在其他地方連接。

# pip 安裝常常會跳出 PATH 警告,這裡先調整
export PATH="/usr/local/bin:$PATH"
# 安裝 Jupyter Lab
pip install --user jupyter jupyterlab
# markupsafe 在新版本中把 soft_unicode 拿掉了,所以要安裝舊版本
pip install markupsafe==2.0.1

為了讓我們能夠遠端 access,要先調整一些設定。

# 建立設定檔
jupyter notebook --generate-config
# 設定密碼,這裡用 jupyter notebook password 的話設定會跑掉,不建議使用
jupyter server password
# 使用 nano 修改設定檔,如果要用其他 text editor 也可以
nano ~/.jupyter/jupyter_notebook_config.py

調整 ~/.jupyter/jupyter_notebook_config.py 內容,因為檔案本身是滿滿的註解,只有一行 c = get_config() ,直接在這行之後貼上以下內容就可以了。

c.NotebookApp.allow_password_change = False
c.NotebookApp.allow_root = True
c.NotebookApp.base_url = '/'
c.NotebookApp.default_url = '/lab'
c.NotebookApp.disable_check_xsrf = False
c.NotebookApp.ip = '*'
c.NotebookApp.nbserver_extensions = { 'jupyterlab' : True }
c.NotebookApp.notebook_dir = '~/' # 調整 Notebook 的路徑
c.NotebookApp.open_browser = False
c.NotebookApp.password_required = True # 要求密碼
c.NotebookApp.port = 8888 # 開放的 port

儲存後,先設定 serverextension

jupyter serverextension enable --py jupyterlab

為了讓 jupyter 在我們關閉 terminal 後持續執行,要建立 screen,如果要用 container 也可以。

screen -S jupyterlab
jupyter lab

完成之後,就可以看到 Jupyter Lab 開始執行了,可以從 public IP 連進去看看,記得 port 是在 8888(或是自己調整的其他 port)。如果要離開 screen,可以按 Ctrl+A 再按 Ctrl+D ,就可以退出了。重新進入 screen,可以執行 screen -r <ID> 。

連入後的登入畫面

連入後的登入畫面

登入後的畫面

登入後的畫面

到這邊,基本上就完成了 VPS 的深度學習環境部署。當然還有 OpenCV、scikit-learn 等沒有安裝,但因為相較之下比較好安裝,就沒有另外說明。

再次感謝 CNTUG 的 Infra Labs 贊助,也歡迎大家去多加了解他們,參與活動如 meetup 等。也感謝我的偶像 Jerry Yang 幫我看這篇文章,第一次寫技術文,歡迎大家去看看他的部落格


raw-image

本著作係採用創用 CC 姓名標示 4.0 國際 授權條款授權。

Ted Lu 呂顥天,16 歲、開源社群參與者、台灣開放教育推動團隊發起人兼資料工程師、醫學影像研究者。不是正在被神經科學揍爛,就是在被揍爛的路上。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
/ 大家現在出門買東西還會帶錢包嗎 鴨鴨發現自己好像快一個禮拜沒帶錢包出門 還是可以天天買滿買好回家(? 因此為了記錄手機消費跟各種紅利優惠 鴨鴨都會特別注意銀行的App好不好用! 像是介面設計就是會很在意的地方 很多銀行通常會為了要滿足不同客群 會推出很多App讓使用者下載 每次
Thumbnail
JASP 是一款直觀易用的統計分析軟體,其中包含強大的篩選功能,提供三種介面:點擊篩選器(Click Filter)、拖放篩選器(Drag and Drop Filter)以及 R 篩選器(R Filter)。本文詳細介紹了如何利用這些功能篩選數據,並通過具體範例幫助用戶理解操作步驟。
在現代 Web 應用中,實現用戶登入功能是非常基本且重要的步驟。本文將帶您了解如何在 Laravel 中構建一個完整的登入系統,涵蓋後端處理邏輯、前端表單設計以及相關的路由和中間件設定。這篇指南旨在幫助您建立一個簡潔且可擴展的登入流程。
Thumbnail
在使用 AutoCAD 進行地圖繪製時,能夠輕鬆地整合來自網路的 WMS 服務圖層將大大提升工作的效率。本文將帶您一步步了解如何加入 WMS 連接,並選擇您需要的圖層和座標系統,從而無縫地將網路地圖資料導入 AutoCAD。
在這篇文章中,我們將深入探討如何在 Laravel 應用程式中處理檔案上傳。我們將從前端頁面的檔案選擇到後端儲存與顯示檔案的完整流程,涵蓋從用戶選擇檔案,到將其上傳並保存在伺服器,直到如何在資料庫中儲存檔案路徑,並在頁面上顯示它們。這些步驟將有助於您瞭解如何在 Laravel 中高效地處理檔案上傳。
聖誕假期已經結束,相信不少人已經開始收拾聖誕裝飾了。 如果是塑膠樹,隔年可以繼續用。如果是真樹,各個市政府都有各自的回收時間跟地點。如果在指定的時間把聖誕樹放置在指定的地點,市政府會回收這些樹,將其做堆肥或是用來當作生物發電。 想知道自己市政府回收聖誕樹時間及地點,請搜尋各自市政府網站。千萬不要
Thumbnail
本文參考TensorFlow官網Deep Convolutional Generative Adversarial Network的程式碼來加以實作說明。 示範如何使用深度卷積生成對抗網路(DCGAN) 生成手寫數位影像。
Thumbnail
介紹這次Computex的兩大主題,AI Server與AI PC,展現了台灣廠商強大的供應能力,隨處可見黃仁勳的簽名,展示了美國頂尖企業與台灣製造那層密不可分的夥伴關係,就讓我們一起來探索,這些尖端科技產品。
Thumbnail
隨著人工智慧(AI)技術的快速發展,NVIDIA 執行長黃仁勳在 2024 年 Computex 上宣布全新 AI 藍圖,包括推出 AI 推論服務「NIM」和「數位人類」概念,並揭露下一代GPU 路線「Rubin」。
Thumbnail
科技巨擘聯手推進生成式AI發展 開創人工智慧新時代 在生成式人工智慧(Generative AI)的浪潮中,雲端運算龍頭AWS和晶片巨擘NVIDIA攜手合作,推出一系列革命性的基礎設施、軟體和服務。
Thumbnail
/ 大家現在出門買東西還會帶錢包嗎 鴨鴨發現自己好像快一個禮拜沒帶錢包出門 還是可以天天買滿買好回家(? 因此為了記錄手機消費跟各種紅利優惠 鴨鴨都會特別注意銀行的App好不好用! 像是介面設計就是會很在意的地方 很多銀行通常會為了要滿足不同客群 會推出很多App讓使用者下載 每次
Thumbnail
JASP 是一款直觀易用的統計分析軟體,其中包含強大的篩選功能,提供三種介面:點擊篩選器(Click Filter)、拖放篩選器(Drag and Drop Filter)以及 R 篩選器(R Filter)。本文詳細介紹了如何利用這些功能篩選數據,並通過具體範例幫助用戶理解操作步驟。
在現代 Web 應用中,實現用戶登入功能是非常基本且重要的步驟。本文將帶您了解如何在 Laravel 中構建一個完整的登入系統,涵蓋後端處理邏輯、前端表單設計以及相關的路由和中間件設定。這篇指南旨在幫助您建立一個簡潔且可擴展的登入流程。
Thumbnail
在使用 AutoCAD 進行地圖繪製時,能夠輕鬆地整合來自網路的 WMS 服務圖層將大大提升工作的效率。本文將帶您一步步了解如何加入 WMS 連接,並選擇您需要的圖層和座標系統,從而無縫地將網路地圖資料導入 AutoCAD。
在這篇文章中,我們將深入探討如何在 Laravel 應用程式中處理檔案上傳。我們將從前端頁面的檔案選擇到後端儲存與顯示檔案的完整流程,涵蓋從用戶選擇檔案,到將其上傳並保存在伺服器,直到如何在資料庫中儲存檔案路徑,並在頁面上顯示它們。這些步驟將有助於您瞭解如何在 Laravel 中高效地處理檔案上傳。
聖誕假期已經結束,相信不少人已經開始收拾聖誕裝飾了。 如果是塑膠樹,隔年可以繼續用。如果是真樹,各個市政府都有各自的回收時間跟地點。如果在指定的時間把聖誕樹放置在指定的地點,市政府會回收這些樹,將其做堆肥或是用來當作生物發電。 想知道自己市政府回收聖誕樹時間及地點,請搜尋各自市政府網站。千萬不要
Thumbnail
本文參考TensorFlow官網Deep Convolutional Generative Adversarial Network的程式碼來加以實作說明。 示範如何使用深度卷積生成對抗網路(DCGAN) 生成手寫數位影像。
Thumbnail
介紹這次Computex的兩大主題,AI Server與AI PC,展現了台灣廠商強大的供應能力,隨處可見黃仁勳的簽名,展示了美國頂尖企業與台灣製造那層密不可分的夥伴關係,就讓我們一起來探索,這些尖端科技產品。
Thumbnail
隨著人工智慧(AI)技術的快速發展,NVIDIA 執行長黃仁勳在 2024 年 Computex 上宣布全新 AI 藍圖,包括推出 AI 推論服務「NIM」和「數位人類」概念,並揭露下一代GPU 路線「Rubin」。
Thumbnail
科技巨擘聯手推進生成式AI發展 開創人工智慧新時代 在生成式人工智慧(Generative AI)的浪潮中,雲端運算龍頭AWS和晶片巨擘NVIDIA攜手合作,推出一系列革命性的基礎設施、軟體和服務。