從零開始實踐大模型 - 配置環境

本文地址:blog.lucien.ink/archives/549

本文將介紹在面向深度學習時,推薦的環境配置以及一些使用 Linux 的習慣。

本文的部分內容與 Debian 下 CUDA 生產環境配置筆記 有所重疊,但也有些許的不一樣,在正文中不額外注明。

前言

本文將主要分 4 部分:

  1. 配置 SSH 登陸
  2. 安裝顯卡驅動
  3. 安裝 Docker 并配置“Docker 顯卡驅動”
  4. 切換至普通用戶并安裝 miniconda

配置 SSH 登陸

在安裝完系統并重啟之后,首先看到的是一個登陸界面,在這里輸入我們在安裝階段設定好的 root 用戶及密碼即可。請注意,在輸入密碼的時候,是看不見自己輸了什么、輸了幾個字符的。

配置用戶登陸

登陸進 root 之后,在這里我們先什么都不做,先配置 root 用戶的 ssh 登陸權限。在大部分的教程中都會直接在 /etc/ssh/sshd_config 中添加一行 PermitRootLogin yes,在這里筆者是及其不推薦的。

對于 root 用戶來說,推薦的方式是密鑰登陸,在本地用 ssh-keygen 生成一個公私鑰對,將本地生成的 ~/.ssh/id_rsa.pub 拷貝至服務器的 ~/.ssh/authorized_keys 中(如果服務器中提示 ~/.ssh 不存在則執行 mkdir ~/.ssh 創建一個就好)。

在這里給出簡單的命令:

mkdir -p ~/.ssh
echo 'content of your id_rsa.pub' >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

有些小伙伴會遇到如何把本地的 ~/.ssh/id_rsa.pub 弄到服務器中的問題,在這里提供 3 個解決方案:

  1. 先臨時打開 PermitRootLogin yes,用 ssh 拷過去后再關掉
  2. 本地在 ~/.ssh 目錄下用 python3 -m http.server 3000 起一個 HTTP 文件服務,然后去服務器上執行 wget
  3. 使用 PasteMe 來傳輸,在這里不贅述

基礎軟件

在這里使用 TUNA 的 Debian 軟件源 作為 APT mirror:

cat << EOF > /etc/apt/sources.list
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
EOF
apt update  # 更新索引
apt install curl wget screen git -y  # 常用軟件

安裝顯卡驅動

軟件依賴

apt update
apt install linux-headers-`uname -r` build-essential  # CUDA 驅動的依賴

禁用 Nouveau

這一步是必要的,因為 Nouveau 也是 NVIDIA GPU 的驅動程序,參考 nouveau - 維基百科。

cat << EOF > /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0
EOF
update-initramfs -u
reboot

下載驅動

前往 Official Drivers | NVIDIA 下載顯卡驅動,請注意,CUDA Toolkit 不要選 Any,否則會獲得一個十分舊的驅動,會影響 nvidia docker (CUDA >= 11.6) 的安裝。

對于大部分服務器來說,操作系統選 Linux 64-bit,語言推薦選 English (US)。CUDA Toolkit 筆者在這里選擇 12.4 版本,得到的下載鏈接為:NVIDIA-Linux-x86_64-550.90.07.run,下載到服務器上即可。

在這里我額外測試了一下,對于 Linux 64-bit 來說,不論是消費卡(RTX 4090、RTX 3090),還是面向數據中心的卡(H100、A100、V100、P4),驅動是一模一樣的。

wget 'https://us.download.nvidia.com/tesla/550.90.07/NVIDIA-Linux-x86_64-550.90.07.run'

安裝驅動

chmod +x NVIDIA-Linux-x86_64-550.90.07.run
./NVIDIA-Linux-x86_64-550.90.07.run -s --no-questions --accept-license --disable-nouveau --no-drm

在這之后,執行 nvidia-smi -L 應該能看到如下內容:

$ nvidia-smi -L
GPU 0: Tesla P4 (UUID: GPU-***)
GPU 1: Tesla P4 (UUID: GPU-***)

顯卡常駐

nvidia-persistenced 常駐

默認情況下,nvidia-smi 執行起來會很慢,它的等待時長會隨著顯卡數量的增加而增加。這是因為常駐模式(Persistence Mode)沒有打開,對于服務器來說,強烈建議打開這一選項。

可以通過添加一個 啟動項來保持常駐模式打開:

cat <<EOF >> /etc/systemd/system/nvidia-persistenced.service
[Unit]
Description=NVIDIA Persistence Daemon
Before=docker.service
Wants=syslog.target[Service]
Type=forking
ExecStart=/usr/bin/nvidia-persistenced
ExecStopPost=/bin/rm -rf /var/run/nvidia-persistenced[Install]
WantedBy=multi-user.target
EOFsystemctl daemon-reload
systemctl start nvidia-persistenced
systemctl enable nvidia-persistenced

可以通過 nvidia-smi -q -i 0 | grep Persistence 來檢查某張顯卡該模式的狀態。

安裝 NVSwtich 驅動

如果讀者使用的不是 SXM 的卡,請跳過這一步,如果不明白這里是在說什么,也可以先跳過

對于 H100 SXMA100 SXM 等擁有 NVSwitch 的整機來說,需要額外安裝 nvidia-fabricmanager 來啟用對 NVSwitch 的支持。

wget https://developer.download.nvidia.com/compute/cuda/repos/debian12/x86_64/nvidia-fabricmanager-550_550.90.07-1_amd64.deb
dpkg -i nvidia-fabricmanager-550_550.90.07-1_amd64.deb

請注意,這里的 nvidia-fabricmanager 需要與 CUDA Driver 版本匹配。

通過執行 nvidia-smi -q -i 0 | grep -i -A 2 Fabric 來驗證 nvidia-fabricmanager 是否安裝成功,看到 Success 代表成功。(參考資料:fabric-manager-user-guide.pdf,第 11 頁)

$ nvidia-smi -q -i 0 | grep -i -A 2 FabricFabricState                             : CompletedStatus                            : Success
特殊情況處理

筆者曾經遇到過下載的 CUDA 驅動版本并未被 APT 中的 nvidia-fabricmanager 支持的情況,比如通過執行 apt-cache madison nvidia-fabricmanager-550 可以發現,nvidia-fabricmanager-550 只支持 550.90.07-1550.54.15-1550.54.14-1 三個版本,這種時候可通過執行 ./NVIDIA-Linux-x86_64-550.90.07.run --uninstall 來卸載 CUDA 驅動,然后重新下載支持的驅動版本。

$ apt-cache madison nvidia-fabricmanager-550
nvidia-fabricmanager-550 | 550.90.07-1 | https://developer.download.nvidia.com/compute/cuda/repos/debian12/x86_64  Packages
nvidia-fabricmanager-550 | 550.54.15-1 | https://developer.download.nvidia.com/compute/cuda/repos/debian12/x86_64  Packages
nvidia-fabricmanager-550 | 550.54.14-1 | https://developer.download.nvidia.com/compute/cuda/repos/debian12/x86_64  Packages

安裝 Docker

Docker CE 軟件倉庫

export DOWNLOAD_URL="https://mirrors.tuna.tsinghua.edu.cn/docker-ce"
wget -O- https://get.docker.com/ | sh

在這里需要給普通用戶執行 docker 的權限。

# dockerd-rootless-setuptool.sh install  # rootless mode
usermod -aG docker ${your username}  # root mode

配置 Docker 可以調用顯卡

Installing the NVIDIA Container Toolkit

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
apt update
apt install -y nvidia-container-toolkit
nvidia-ctk runtime configure --runtime=docker  # 這一步會修改 /etc/docker/daemon.json
systemctl restart docker

測試:

如果網絡不通的話,在鏡像名前面添加 hub.uuuadc.top 以使用代理:hub.uuuadc.top/nvidia/cuda:11.6.2-base-ubuntu20.04

docker run --rm --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi

如果能看到 nvidia-smi 的內容,則代表安裝成功了。

普通用戶安裝 conda 環境

在這里我們退出 root 用戶的登錄,使用密碼直接 SSH 登錄普通用戶。

隨后我們從 Miniconda 下載 Miniconda: Miniconda3 Linux 64-bit

wget 'https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh'
bash Miniconda3-latest-Linux-x86_64.sh -b -p ${HOME}/.local/miniconda3
${HOME}/.local/miniconda3/bin/conda init

配置 conda 鏡像

Anaconda 鏡像使用幫助

conda config --set show_channel_urls yes 
cat << EOF >> ~/.condarc
channels:- defaults
default_channels:- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudmsys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudbioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudmenpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudpytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudpytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudsimpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/clouddeepmodeling: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/
EOF

配置 pypi 鏡像

PyPI 鏡像使用幫助

pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip3 config set global.trusted-host pypi.tuna.tsinghua.edu.cn  # 當使用 http 或自簽證書時需要這個配置

驗證 Python 對 CUDA 的調用

在這里筆者也不推薦直接使用 base 環境,我們新建一個環境:

conda create -n python3 python=3.12
conda config --set auto_activate_base false  # 默認不激活 base 環境
echo 'conda activate python3' >> ~/.bashrc  # 默認激活 python3 環境

重新登錄后可看到 python3 已經作為默認環境了。

我們簡單下載一個 torch 來驗證環境安裝的正確性:

pip3 install torch numpy
python3 -c 'import torch; print(torch.tensor(0).cuda())'

尾聲

建議

在這里再多啰嗦幾句,希望能讓后輩們少走些彎路:

  1. 任何行為,不論是安裝軟件、配環境、寫代碼還是一些系統操作,都應該將影響降低至 最小范圍。比如將 nvcc、gcc 裝至用戶、環境級別而不是直接用 root 安裝。
  2. 除了本章節的內容,在任何情況下,都不建議直接使用 root 賬戶進行操作,除非讀者是一位對 Linux 非常熟悉的專家并且明白自己在做什么,否則會面臨各種潛在的權限問題、崩潰、挖礦病毒、數據丟失等風險。
  3. 在任何情況下,都不應該操作 Linux 本身的 Python 環境,請使用 venv 或 conda
  4. 在任何情況下,都不應該隨意變更宿主機的 CUDA 版本,請使用 docker
  5. 不建議在宿主機中安裝 nvcc、TensoRT 等內容,據筆者觀察,至少 90% 的用戶他們并不明白自己在做什么,所以 請使用 conda 或 docker

備忘

  1. 安裝 cudnn

    conda install conda-forge::cudnn
    
  2. 安裝 nvcc

    conda install nvidia::cuda-nvcc
    
  3. 安裝 gcc

    conda install conda-forge::gcc
    

Reference

  • Debian 下 CUDA 生產環境配置筆記
  • Debian 軟件源 - 清華大學開源軟件鏡像站
  • Debian 下 CUDA 生產環境配置筆記 - Lucien’s Blog
  • nouveau - 維基百科
  • Official Drivers | NVIDIA
  • fabric-manager-user-guide.pdf
  • Download Installer for Linux Debian 12 x86_64
  • nvidia-persistenced 常駐
  • Docker CE 軟件倉庫 - 清華大學開源軟件鏡像站
  • Installing the NVIDIA Container Toolkit
  • Miniconda - Anaconda document
  • Anaconda 鏡像使用幫助 - 清華大學開源軟件鏡像站
  • PyPI 鏡像使用幫助 - 清華大學開源軟件鏡像站

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/41773.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/41773.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/41773.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

絕緣子陶瓷絕緣子玻色絕緣子聚合物絕緣子檢測數據集VOC+YOLO格式2050張3類別

數據集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路徑的txt文件&#xff0c;僅僅包含jpg圖片以及對應的VOC格式xml文件和yolo格式txt文件) 圖片數量(jpg文件個數)&#xff1a;2050 標注數量(xml文件個數)&#xff1a;2050 標注數量(txt文件個數)&#xff1a;2050 標注…

Debezium系列之:支持在一個數據庫connector采集中過濾某些表的刪除事件

Debezium系列之:支持在一個數據庫connector采集中過濾某些表的刪除事件 一、需求二、相關技術三、參數設置四、消費數據一、需求 在一個數據庫的connector中采集了多張表,部分表存在數據歸檔的業務場景,會定期從表中刪除歷史數據,希望能過濾掉存在數據歸檔這些表的刪除事件…

Ubuntu 22.04遠程自動登錄桌面環境

如果需要遠程自動登錄桌面環境&#xff0c;首先需要將Ubuntu的自動登錄打開&#xff0c;在【settings】-【user】下面 然后要設置【Sharing】進行桌面共享&#xff0c;Ubuntu有自帶的桌面共享功能&#xff0c;不需要另外去安裝xrdp或者vnc之類的工具了 點開【Remote Desktop】…

Orangepi配合IIC驅動OLED屏幕

目錄 一、OLED屏幕 二、Orangepi的IIC接口及OLED屏幕硬件接線 2.1 Orangepi的IIC接口&#xff1a; 2.2 Orangepi與OLED屏幕硬件接線&#xff1a; 三、wiringPi庫示例代碼 3.1 wiringPi庫OLED屏幕示例代碼&#xff1a; 3.2 OLED顯示自己想要的字符&#xff1a; 一、OLED屏…

unix高級編程系列之文件I/O

背景 作為linux 開發者&#xff0c;我們不可避免會接觸到文件編程。比如通過文件記錄程序配置參數&#xff0c;通過字符設備與外設進行通信。因此作為合格的linux開發者&#xff0c;一定要熟練掌握文件編程。在文件編程中&#xff0c;我們一般會有兩類接口函數&#xff1a;標準…

Mysql慢日志、慢SQL

慢查詢日志 查看執行慢的SQL語句&#xff0c;需要先開啟慢查詢日志。 MySQL 的慢查詢日志&#xff0c;記錄在 MySQL 中響應時間超過閥值的語句&#xff08;具體指運行時間超過 long_query_time 值的SQL。long_query_time 的默認值為10&#xff0c;意思是運行10秒以上(不含10秒…

實現基于Spring Boot的Web安全防護

實現基于Spring Boot的Web安全防護 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 在當今互聯網應用的開發中&#xff0c;保護用戶數據和系統安全至關重要。S…

阿里云RDS云數據庫庫表恢復操作

最近數據庫中數據被人誤刪了,記錄一下恢復操作方便以后發生時進行恢復. 1.打開控制臺&#xff0c;進入云數據庫實例. 2.進入實例后 &#xff0c;點擊右側的備份恢復&#xff0c;然后看一下備份時間點&#xff0c;中間這邊都是阿里云自動備份的備份集&#xff0c;基本都是7天一備…

詳解「一本通 5.1 練習 1」括號配對(區間DP經典題)

一.題目 二.思路 題目的大意是說:給你一個只由[ ] ( )構成的字符串&#xff0c;請問需要增加多少個字符才能使其變為一個合法的括號序列。 因為添加若干字符使其達到匹配的目的等價于將不匹配的字符去除使得字符串達到匹配的目的 所以這題只需計算出已匹配完成的括號數,再…

中英雙語介紹倫敦金融城(City of London)

中文版 倫敦金融城&#xff0c;通常稱為“金融城”或“城”&#xff08;The City&#xff09;&#xff0c;是英國倫敦市中心的一個著名金融區&#xff0c;具有悠久的歷史和全球性的影響力。以下是關于倫敦金融城的詳細介紹&#xff0c;包括其地理位置、人口、主要公司、歷史背…

機器學習原理之 -- 隨機森林分類:由來及原理詳解

隨機森林分類器是機器學習中一種強大且靈活的集成學習方法。它通過構建多棵決策樹并結合其結果來提高分類精度和穩定性。本文將詳細介紹隨機森林分類器的由來、基本原理、構建過程及其優缺點。 二、隨機森林的由來 隨機森林&#xff08;Random Forest&#xff09;由Leo Breima…

【優化論】約束優化算法

約束優化算法是一類專門處理目標函數在存在約束條件下求解最優解的方法。為了更好地理解約束優化算法&#xff0c;我們需要了解一些核心概念和基本方法。 約束優化的核心概念 可行域&#xff08;Feasible Region&#xff09;&#xff1a; 比喻&#xff1a;想象你在一個園藝場…

基于機器學習的永磁同步電機矢量控制策略-高分資源-下載可用!

基于機器學習的永磁同步電機矢量控制策略 優勢 訓練了RL-Agent&#xff0c;能夠提高電機在非線性負載下的性能。 部分程序 仿真結果 轉矩估計及dq軸電流。 代碼有償&#xff0c;50&#xff0c;需要的可以聯系。

數學建模算法目標規劃

在人們的生產實踐中&#xff0c;經常會遇到如何利用現有資源來安排生產&#xff0c;以取得最大經濟 效益的問題。此類問題構成了運籌學的一個重要分支—數學規劃&#xff0c;而線性規劃(Linear Programming 簡記 LP)則是數學規劃的一個重要分支。特別是在計算機能處理成千上萬個…

底層軟件 | STM32啟動分析之main函數是怎樣跑起來的

應屆生面試&#xff0c;基本上嵌入式一般都是基于32的項目&#xff0c;記得我當年面大疆的就是有這個題目。 1、STM32啟動規則 STM32根據boot0和boot1的電平決定啟動位置&#xff0c;boot00時從主Flash啟動&#xff0c;即0x08000000地址啟動。 按照spec&#xff0c;M3核的中斷…

構建工程化:多種不同的工程體系如何編寫MakeFile

源碼分析 核心MakeFile 這個 Makefile 是一個復雜的構建腳本&#xff0c;用于管理和構建一個大型項目。它包括多個目標、條件判斷和遞歸調用 make 命令來處理多個子項目和子目錄。讓我們逐部分進行詳細解析。 偽目標和變量定義 .PHONY: all clean install build test init.…

依賴注入的優點、解決的問題以及其底層原理和邏輯

依賴注入&#xff08;Dependency Injection, DI&#xff09;是一種設計模式&#xff0c;用于實現控制反轉&#xff08;Inversion of Control, IoC&#xff09;。它通過將對象的依賴關系從類內部轉移到外部配置或注入&#xff0c;從而提高代碼的可維護性、可測試性和可擴展性。以…

使用Spring Boot和Apache Camel集成第三方服務

使用Spring Boot和Apache Camel集成第三方服務 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天我們將探討如何利用Spring Boot和Apache Camel來集成第三方服…

pycharm如何使用jupyter

目錄 配置jupyter新建jupyter文件別人寫的方法&#xff08;在pycharm種安裝&#xff0c;在網頁中使用&#xff09; pycharm專業版 配置jupyter 在pycharm終端啟動一個conda虛擬環境&#xff0c;輸入 conda install jupyter會有很多前置包需要安裝&#xff1a; 新建jupyter…

一文理清LK光流

舉出幾種光流方法&#xff0c;說明LK光流的建模方式&#xff1f; 光流方法是用于估計圖像序列中像素點運動的技術&#xff0c;廣泛應用于計算機視覺和視頻處理領域。以下是幾種常見的光流方法&#xff1a; Lucas-Kanade (LK) 方法&#xff1a; 一種基于局部窗口的光流估計方法…