離線服務器算法部署環境配置

本文將詳細記錄我如何為一臺全新的離線服務器配置必要的運行環境,包括基礎編譯工具、NVIDIA顯卡驅動以及NVIDIA-Docker,以便順利部署深度學習算法。

前提條件:

  • 目標離線服務器已安裝操作系統(本文以Ubuntu 18.04為例)。
  • Docker 服務已安裝并運行。
  • Docker-Compose 已安裝。

核心思路:
利用一臺有網絡的服務器(與目標服務器操作系統一致或兼容)下載所有需要的軟件包和驅動,然后將這些文件拷貝到離線服務器進行安裝。


階段一:在線服務器資源下載

在有網絡的服務器上,我們需要下載以下幾類關鍵文件:

  1. 基礎編譯環境和依賴庫的 .deb 包。
  2. NVIDIA 顯卡驅動的 .run 安裝包。
  3. NVIDIA-Docker (或 nvidia-container-toolkit) 的 .deb 包。

1.1 準備基礎編譯環境和依賴庫

為了確保離線環境的純凈與一致性,我選擇使用Docker容器(基于ubuntu:18.04)來下載基礎依賴包。這樣做的好處是可以模擬目標服務器的操作系統環境,減少兼容性問題。

以下是我使用的命令序列:

首先,拉取官方的Ubuntu 18.04鏡像:

docker pull ubuntu:18.04

然后,運行一個容器,并將宿主機的一個目錄(例如 /path/on/host/for_debs)掛載到容器的 /downloaded_debs 目錄,用于存放下載的 .deb 包:

docker run -it --rm \-v /path/on/host/for_debs:/downloaded_debs \ubuntu:18.04 /bin/bash

進入容器后,執行以下命令更新apt緩存,安裝一些下載工具,然后僅下載我們需要的包到本地緩存,最后再拷貝出來:

# 在容器內部執行:
apt-get update
apt-get install -y apt-utils ca-certificates # ca-certificates 用于HTTPS下載# 清理舊的緩存(可選,但推薦)
apt-get clean# 僅下載指定的依賴包及其所有依賴項,不進行安裝
# 注意:這里的包列表非常詳細,是根據項目需求和驅動編譯可能需要的依賴梳理的
# 實際操作中,您可能需要根據自己的需求調整這個列表
apt-get --reinstall install --download-only \build-essential \gcc \g++ \g++-7 \make \dpkg-dev \libdpkg-perl=1.19.0.5ubuntu2.4 \binutils=2.30-21ubuntu1~18.04.9 \binutils-common=2.30-21ubuntu1~18.04.9 \libbinutils=2.30-21ubuntu1~18.04.9 \binutils-x86-64-linux-gnu=2.30-21ubuntu1~18.04.9 \gcc-7 \libgcc-7-dev=7.5.0-3ubuntu1~18.04 \cpp-7 \libstdc++-7-dev=7.5.0-3ubuntu1~18.04 \libitm1 \libatomic1 \libasan4 \liblsan0 \libtsan0 \libubsan0 \libcilkrts5 \libmpx2 \libquadmath0 \libc6-dev=2.27-3ubuntu1.6 \libc6=2.27-3ubuntu1.6 \libc-dev-bin=2.27-3ubuntu1.6 \linux-libc-dev \linux-headers-5.4.0-150-generic \linux-hwe-5.4-headers-5.4.0-150 \perl=5.26.1-6ubuntu0.7 \perl-base=5.26.1-6ubuntu0.7 \libperl5.26=5.26.1-6ubuntu0.7 \perl-modules-5.26# 將下載的 .deb 文件從apt緩存復制到我們掛載的目錄
cp /var/cache/apt/archives/*.deb /downloaded_debs/# 退出容器
exit

執行完畢后,所有必需的 .deb 包都已保存在宿主機的 /path/on/host/for_debs 目錄中。

注意:linux-headers-5.4.0-150-generic 和 linux-hwe-5.4-headers-5.4.0-150 是特定內核版本的頭文件。你需要根據你離線服務器的內核版本 (uname -r) 下載對應的頭文件。如果在線服務器的內核版本與離線服務器不同,你可能需要臨時下載對應版本的頭文件包,或者在Docker容器內通過修改源的方式嘗試獲取特定版本的內核頭文件包。最穩妥的方式是確保在線下載環境的內核或可獲取的包版本與離線目標一致。

1.2 下載 NVIDIA 顯卡驅動 📦

訪問 NVIDIA官方驅動下載頁面,根據你服務器的顯卡型號和操作系統(Linux 64-bit)選擇合適的驅動版本,并下載 .run 文件。例如 NVIDIA-Linux-x86_64-xxx.xx.xx.run。將其保存在之前準備的 /path/on/host/for_debs 目錄(或者一個專門存放驅動的目錄)中。

1.3 下載 NVIDIA-Docker 相關包 🐳

NVIDIA-Docker 允許 Docker 容器直接訪問宿主機的 GPU。現在推薦使用 nvidia-container-toolkit
有網絡的Ubuntu 18.04服務器上執行以下步驟來下載 nvidia-docker2 (或 nvidia-container-toolkit) 及其依賴:

# 添加 NVIDIA Docker 的軟件源 (在有網絡的機器上)
curl -s -L [https://nvidia.github.io/nvidia-docker/gpgkey](https://nvidia.github.io/nvidia-docker/gpgkey) | sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L [https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list](https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list) | sudo tee /etc/apt/sources.list.d/nvidia-docker.listsudo apt-get update# 僅下載 nvidia-docker2 及其依賴 (舊版,但有些環境可能仍需)
# sudo apt-get install --download-only -y nvidia-docker2# 推薦下載 nvidia-container-toolkit (新版)
sudo apt-get install --download-only -y nvidia-container-toolkit

下載完成后,相關的 .deb 文件會存放在 /var/cache/apt/archives/ 目錄下。將這些 nvidia-docker2 或 nvidia-container-toolkit 相關的 .deb 包也復制到你的 /path/on/host/for_debs 目錄中。

至此,所有需要的離線安裝包都已準備就緒。

階段二:離線服務器安裝

現在,將在線服務器上 /path/on/host/for_debs 目錄(或其他你存放所有下載文件的目錄)中的所有內容(包括基礎依賴的 .deb 文件夾、NVIDIA驅動 .run 文件、nvidia-docker.deb 包)通過U盤、移動硬盤或其他方式傳輸到目標離線服務器上。假設我們把所有文件都放在了離線服務器的 /opt/offline_packages 目錄下。

2.1 安裝基礎編譯環境和依賴庫

進入存放 .deb 包的目錄,并使用 dpkg 進行安裝:

cd /opt/offline_packages/debs_from_ubuntu_container # 這是之前下載的基礎依賴
sudo dpkg -i *.deb

如果在執行 dpkg -i 時遇到依賴問題,可以嘗試執行以下命令,它會嘗試使用當前目錄下已有的包來解決這些依賴關系:

sudo apt-get -f install

由于是離線環境,apt-get -f install 只有在所有必需的依賴包都已經被 dpkg -i “知曉”(即嘗試安裝過或已解包)并且這些包確實存在于本地時才可能成功解決問題。如果依然報錯,說明你下載的包不全,需要回到階段一補充下載缺失的依賴。

2.2 安裝 NVIDIA 顯卡驅動

  1. 禁用 Nouveau 驅動:Nouveau 是開源的 NVIDIA 驅動,與官方驅動沖突。
    創建一個文件 /etc/modprobe.d/blacklist-nouveau.conf

    sudo nano /etc/modprobe.d/blacklist-nouveau.conf
    

    添加以下內容:

    blacklist nouveau
    options nouveau modeset=0
    

    更新 initramfs 并重啟:

    sudo update-initramfs -u
    sudo reboot
    

    重啟后,驗證 Nouveau 是否已禁用:

    lsmod | grep nouveau
    

    如果沒有任何輸出,則表示禁用成功。

  2. 安裝驅動
    給驅動文件執行權限,并運行安裝程序。

    cd /opt/offline_packages # 假設 .run 文件在此
    sudo chmod +x NVIDIA-Linux-x86_64-xxx.xx.xx.run
    sudo ./NVIDIA-Linux-x86_64-xxx.xx.xx.run --no-x-check --no-nouveau-check --no-opengl-files
    
    • --no-x-check: 不檢查X服務狀態(服務器通常沒有X)。
    • --no-nouveau-check: 再次確認不檢查nouveau(我們已經禁用了)。
    • --no-opengl-files: 僅安裝驅動,不安裝OpenGL庫(服務器通常不需要,且可能與現有mesa庫沖突)。

    按照提示完成安裝。通常需要接受許可協議,可能會詢問是否注冊DKMS(推薦選擇是,這樣內核更新后驅動會自動重新編譯)。

  3. 驗證驅動安裝

    nvidia-smi
    

    如果成功安裝,此命令會顯示顯卡信息和驅動版本。

2.3 安裝和配置 NVIDIA-Docker

  1. 安裝 nvidia-docker2 / nvidia-container-toolkit
    進入存放 nvidia-docker 相關 .deb 包的目錄:

    cd /opt/offline_packages/nvidia_docker_debs # 假設你把nvidia-docker的deb包放在這里
    sudo dpkg -i *.deb
    

    同樣,如果遇到依賴問題,可以嘗試 sudo apt-get -f install,前提是相關依賴也已拷貝過來。

  2. 重啟 Docker 服務
    為了讓 Docker 識別新的 NVIDIA runtime,需要重啟 Docker 服務。

    sudo systemctl restart docker
    

    或者在沒有 systemctl 的舊系統上:

    sudo service docker restart
    
  3. 測試 NVIDIA-Docker
    運行一個基于 CUDA 的 Docker 鏡像來測試 GPU 是否能在容器內被訪問:

    docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu18.04 nvidia-smi
    

    (請根據你安裝的驅動版本,選擇一個兼容的 nvidia/cuda 鏡像標簽。例如,如果你的驅動是 470.xx,CUDA 11.4 可能是一個好選擇,對應的鏡像是 nvidia/cuda:11.4.0-base-ubuntu18.04 等。)

    如果此命令在容器內成功輸出了 nvidia-smi 的信息,那么恭喜你,NVIDIA-Docker 配置成功!

總結 🏁

通過以上步驟,我們成功地在一臺無網絡服務器上配置了基礎編譯環境、安裝了 NVIDIA 顯卡驅動,并配置好了 NVIDIA-Docker。現在,這臺服務器已經準備就緒,可以開始部署和運行需要 GPU 加速的算法應用了。雖然離線環境的配置過程相對繁瑣,但只要細心準備,按部就班地操作,就能順利完成。希望這篇記錄能為有類似需求的人提供一些參考。

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

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

相關文章

chromedp -—— 基于 go 的自動化操作瀏覽器庫

chromedp chromedp 是一個用于 Chrome 瀏覽器的自動化測試工具,基于 Go 語言開發,專門用于控制和操作 Chrome 瀏覽器實例。 chromedp 安裝 go get -u github.com/chromedp/chromedp基于chromedp 實現的的簡易學習通刷課系統 目前實現的功能&#xff…

高級特性實戰:死信隊列、延遲隊列與優先級隊列(三)

四、優先級隊列:優先處理重要任務 4.1 優先級隊列概念解析 優先級隊列(Priority Queue)是一種特殊的隊列數據結構,它與普通隊列的主要區別在于,普通隊列遵循先進先出(FIFO)的原則,…

python打卡day34

GPU訓練及類的call方法 知識點回歸: CPU性能的查看:看架構代際、核心數、線程數GPU性能的查看:看顯存、看級別、看架構代際GPU訓練的方法:數據和模型移動到GPU device上類的call方法:為什么定義前向傳播時可以直接寫作…

Newtonsoft Json序列化數據不序列化默認數據

問題描述 數據在序列號為json時,一些默認值也序列化了,像旋轉rot都是0、縮放scal都是1,這樣的默認值完全可以去掉,減少和服務器通信數據量 核心代碼 數據結構字段增加[DefaultValue(1.0)]屬性,縮放的默認值為1 public class Vec3DataOne{[DefaultValue(1.0)] public flo…

可增添功能的鼠標右鍵優化工具

軟件介紹 本文介紹一款能優化Windows電腦的軟件,它可以讓鼠標右鍵菜單添加多種功能。 軟件基本信息 這款名為Easy Context Menu的鼠標右鍵菜單工具非常小巧,軟件大小僅1.14MB,打開即可直接使用,無需進行安裝。 添加功能列舉 它…

Gemini 2.5 Pro 一次測試

您好,您遇到的重定向循環問題,即在 /user/messaging、/user/login?return_to/user/messaging 和 /user/login 之間反復跳轉,通常是由于客戶端的身份驗證狀態檢查和頁面重定向邏輯存在沖突或競爭條件。 在分析了您提供的代碼(特別…

vue3前端后端地址可配置方案

在開發vue3項目過程中,需要切換不同的服務器部署,代碼中配置的服務需要可靈活配置,不隨著run npm build把網址打包到代碼資源中,不然每次切換都需要重新run npm build。需要一個配置文件可以修改服務地址,而打包的代碼…

大模型微調與高效訓練

隨著預訓練大模型(如BERT、GPT、ViT、LLaMA、CLIP等)的崛起,人工智能進入了一個新的范式:預訓練-微調(Pre-train, Fine-tune)。這些大模型在海量數據上學習到了通用的、強大的表示能力和世界知識。然而,要將這些通用模型應用于特定的下游任務或領域,通常還需要進行微調…

編程技能:字符串函數10,strchr

專欄導航 本節文章分別屬于《Win32 學習筆記》和《MFC 學習筆記》兩個專欄,故劃分為兩個專欄導航。讀者可以自行選擇前往哪個專欄。 (一)WIn32 專欄導航 上一篇:編程技能:字符串函數09,strncmp 回到目錄…

動態規劃-53.最大子數組和-力扣(LeetCode)

一、題目解析 在給定順序的數組中找出一段具有最大和的連續子數組,且大小最小為1. 二、算法原理 1.狀態表示 我們可以意一一枚舉出所有的子數組,但我們想要的是最大子數組,所以f[i]表示:以i位置為結尾,所有子數組的最…

C++ queue對象創建、queue賦值操作、queue入隊、出隊、獲得隊首、獲得隊尾操作、queue大小操作、代碼練習

對象創建&#xff0c;代碼見下 #include<iostream> #include<queue>using namespace std;int main() {// 1 默認構造函數queue<int> q1;// 2 拷貝構造函數queue<int> q2(q1);return 0;} queue賦值操作&#xff0c;代碼見下 #include<iostream>…

全鏈路解析:影刀RPA+Coze API自動化工作流實戰指南

在數字化轉型加速的今天&#xff0c;如何通過RPA與API的深度融合實現業務自動化提效&#xff0c;已成為企業降本增效的核心命題。本文以「影刀RPA」與「Coze API」的深度協作為例&#xff0c;系統性拆解從授權配置、數據交互到批量執行的完整技術鏈路&#xff0c;助你快速掌握跨…

php本地 curl 請求證書問題解決

錯誤: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for 解決方案 在php目錄下創建證書文件夾, 執行下面生成命令, 然后在php.ini 文件中配置證書路徑; 重啟環境 curl --eta…

【圖數據庫】--Neo4j 安裝

目錄 1.Neo4j --概述 2.JDK安裝 3.Neo4j--下載 3.1.下載資源包 3.2.創建環境變量 3.3.運行 Neo4j 是目前最流行的圖形數據庫(Graph Database)&#xff0c;它以節點(Node)、關系(Relationship)和屬性(Property)的形式存儲數據&#xff0c;專門為處理高度連接的數據而設計。…

MIT 6.S081 2020Lab5 lazy page allocation 個人全流程

文章目錄 零、寫在前面一、Eliminate allocation from sbrk()1.1 說明1.2 實現 二、Lazy allocation2.1 說明2.2 實現 三、Lazytests and Usertests3.1 說明3.2 實現3.2.1 lazytests3.2.2 usertests 零、寫在前面 可以閱讀下4.6頁面錯誤異常 像應用程序申請內存&#xff0c;內…

(Git) 稀疏檢出(Sparse Checkout) 拉取指定文件

文章目錄 &#x1f3ed;作用&#x1f3ed;指令總覽&#x1f477;core.sparseCheckout&#x1f477;sparse-checkout 文件 &#x1f3ed;實例演示?END&#x1f31f;交流方式 &#x1f3ed;作用 類似于 .gitignore 進行文件的規則匹配。 一般在需要拉取大型項目指定的某些文件…

docker初學

加載鏡像&#xff1a;docker load -i ubuntu.tar 導出鏡像&#xff1a;docker save -o ubuntu1.tar ubuntu 運行&#xff1a; docker run -it --name mu ubuntu /bin/bash ocker run -dit --name mmus docker.1ms.run/library/ubuntu /bin/bash 進入容器&#xff1a;docke…

Docker系列(二):開機自啟動與基礎配置、鏡像加速器優化與疑難排查指南

引言 docker 的快速部署與高效運行依賴于兩大核心環節&#xff1a;基礎環境搭建與鏡像生態優化。本期博文從零開始&#xff0c;系統講解 docker 服務的管理配置與鏡像加速實踐。第一部分聚焦 docker 服務的安裝、權限控制與自啟動設置&#xff0c;確保環境穩定可用&#xff1b…

計算機視覺(圖像算法工程師)學習路線

計算機視覺學習路線 Python基礎 常量與變量 列表、元組、字典、集合 運算符 循環 條件控制語句 函數 面向對象與類 包與模塊Numpy Pandas Matplotlib numpy機器學習 回歸問題 線性回歸 Lasso回歸 Ridge回歸 多項式回歸 決策樹回歸 AdaBoost GBDT 隨機森林回歸 分類問題 邏輯…

工業軟件國產化:構建自主創新生態,賦能制造強國建設

隨著全球產業環境的變化和技術的發展&#xff0c;建立自主可控的工業體系成為我國工業轉型升級、走新型工業化道路、推動國家制造業競爭水平提升的重要抓手。 市場倒逼與政策護航&#xff0c;國產化進程雙輪驅動 據中商產業研究院預測&#xff0c;2025年中國工業軟件市場規模…