2024-01-24|閱讀時間 ‧ 約 34 分鐘

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

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

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

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 執行結果

安裝 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 網站

其實安裝 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 幫我看這篇文章,第一次寫技術文,歡迎大家去看看他的部落格


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

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.