离线服务器算法部署环境配置

本文将详细记录我如何为一台全新的离线服务器配置必要的运行环境,包括基础编译工具、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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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年中国工业软件市场规模…