内网环境下ubuntu 20.04搭建深度学习环境总结

2025年9月更新,随着人工智能的发展,现在深度学习环境配置越来越简单了,常用的pytorch、paddle(3.x)等深度学习库安装的时候自带了cuda和cudnn的python包,不需要在操作系统层面自己安装,配置环境方便快捷。

2024年1月9日更新,如果当服务器用,不建议安装图形界面,稳定性堪忧,每次操作系统卡死后本人需要到另一栋楼手动重启,如果用作桌面系统倒是无所谓。
后来本人禁用了图形界面。

# 多用户模式
systemctl set-default multi-user.target
# 图形界面
systemctl set-default graphical.target

2023年8月16日更新,经历环境配置、维护的痛苦才知道docker有多香,建议测试开发使用docker完成,在深度学习这一块,docker可以打包任意版本的cuda和cudnn镜像,各种包版本都可以在容器中操作。宿主机上只需要安装nvidia驱动和nvidia-container-toolkit。

Windows子系统WSL2也支持CUDA了,可以看我的另一篇文章。

图形界面安装

本人内网环境PC工作站用于跑模型
图形界面安装一般不需要额外安装网卡等驱动,gcc版本默认9.4,网络可使用图形界面配置。

安装系统

本人使用的UltraSO制作系统盘,网上教程很多。

配置root用户登录

配置root用户方便操作,但是最高权限也可能导致一些问题,按需配置。

  • 最小化安装下,创建系统时的用户登录后,直接为root设置密码后root可正常登录。
  • 图形界面下,需要以下几步
    1. 为root设置密码

      sudo passwd root

    2. 修改/etc/gdm3/custom.conf,在[daemon]配置项下添加

      AllowRoot=true

    3. 修改/etc/pam.d/gdm-password,注释掉该行

      auth required pam_succeed_if.so user != root quiet_success

    4. 重启

参考ubuntu20.04图形界面允许root登录

更换apt源

相比以前,最近安装ubuntu默认的源已经不慢了,按需替换apt源,如果是在内网,则必做此步。

cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 按照sources.list内容和目标源更改即可
sed -i 's/cn.archive.ubuntu.com\/ubuntu/10.160.8.81:8081\/repository\/ubuntu-aliyun/g' /etc/apt/sources.list

更新软件

默认情况下,ubuntu20.04 Linux内核是5.15.0-76,截至2023年8月15日,更新后内核为5.15.0-79

apt-get update
apt-get upgrade

安装Nvidia-driver、CUDA、CUDNN

本人首次配置踩了各种坑,包括系统、驱动等,个人踩过太多的坑,网上许多博客只能参考,每个人的情况都不一样,最靠谱的还是官方文档,这里贴出官方的安装教程。

Nvidia-driver和CUDA官方安装教程
cuDNN官方安装教程

有两种两种方式,特定发行的软件包(deb和rpm)和独立的软件包(runfile),rufile方式自带了各种依赖,可在各种Linux发行版工作,但是容易与本地依赖包产生冲突,不太建议使用这种方式。推荐使用deb包方式,快捷简单。

注意,安装driver和安装驱动最好使用同一种方式,即都用deb包或者都是用runfile方式!

注意,安装完之后请不要随意升级或降级内核版本!

nvidia驱动程序需要内核头文件和开发包,并且一旦内核版本改变,驱动程序也需要重新编译安装。Runfile安装方式不对内核相关包做任何检验,但是RPM和DEB包则会检验,如果没有内核相关包,安装程序将自动安装这些包的最新版本,可能不匹配当前内核。因此,最好在安装驱动程序和CUDA之前,安装内核相关包的正确版本,否则可能出现各种各样的问题。

安装前准备

  1. lspci | grep -i nvidia查看显卡设备,查看是否支持cuda
  2. gcc、linux内核版本等,ubuntu20.04不存在此问题
  3. 如果之前安装过,请卸载干净并重启,如何卸载请看下文。

deb包安装方式

下载自己需要的 CUDAdeb包,local或者network(内网的话下载local),然后参考下载页面的安装指示完成安装,更详细的步骤可以参考官网的安装指示。
本人下载的是cuda11.8-ubuntu20.04-local,复制粘贴执行命令后cuda和driver都成功安装,driver版本是520。开发过程中更关注的是cuda版本,driver只要能驱动显卡即可,本人对驱动版本没有要求。

如果需要安装指定版本驱动

# sudo apt-get install cuda-drivers-<branch>
# 安装418版本的驱动
sudo apt-get install cuda-drivers-418

需要确认本地apt添加了这个软件包,这种安装指定驱动的方式本人没有尝试过,网上也几乎没有见到过,不确定能否成功,更详细的指示可以参考官网。
安装完记得重启,然后就可以开始添加环境变量了。

runfile安装方式

首先贴上官网链接,本人安装过程中碰到的很多问题多源于自己没有认真看官网文档,或者说懒得看英文,碰到问题没法解决了才去认真读官方文档。官网runfile安装方式,前几段话就说明了RunFile安装是通过基于交互式NCURSES的接口安装NVIDIA驱动程序和CUDA工具包,安装步骤指引、禁用Nouveau驱动、安装后的附加操作、如何卸载以及CUDA跨平台等内容,直接看官网文档可以少走很多弯路。

安装前准备

准备工作同上,默认的cuda runfile安装包带了驱动程序,能用但不是最新的。
英伟达cuda下载
英伟达显卡驱动下载,最新版驱动。

禁用Nouveau驱动

创建/etc/modprobe.d/blacklist-nouveau.conf并再末尾加入以下内容

blacklist nouveau
options nouveau modeset=0

执行命令

sudo update-initramfs -u

这样就禁用ubuntu默认的开源驱动程序了。

禁用开源Nouvea驱动后还需要一些设置并重启才能生效,本人在没看文档之前,是直接重启的,也没碰到问题。
但是按照官网的指示,禁用开源驱动Nouvea后,修改linux内核启动参数,设置runlevel为3(多用户字符界面),不加载任何图形驱动重启系统,修改/etc/default/grub,找到下面这行,末尾添加nomodeset(不加载任何图像驱动)和3(runlevel为3)。

GRUB_CMDLINE_LINUX_DEFAULT=“quiet nomodeset 3”

执行

update-grub
reboot

在安装驱动的过程中如果碰到图形界面无法正常显示,开机一直黑屏的情况下,可以进入ubuntu的安全恢复模式(重启ubuntu,电脑品牌logo出现后随即长按shirft菜单,选择第二个选项 Advanced options for Ubuntu,然后进入下一个界面,选recovery mode),修改这个文件如上所示,然后update-grub并重启,即可正常开机进入字符界面,重新安装驱动。

安装驱动
sudo sh NVIDIA-Linux-x86_64-xxxxx.run

安装驱动时会有警告和几个选项

  • 如果之前安装过,会确认是否继续安装,确认
  • 是否向 kernel 注册 dkms 模块,是,防止内核更新导致驱动的重新安装
  • 是否安装32位兼容库,一般选否
  • 是否安装opengl文件,一般选否
  • xconfig,本人选的是
安装cuda

执行

sudo sh cuda_<version>_linux.run

然后弹出几个选项,可选择连带driver一起安装,也可以单独安装driver,如果在这里不选择安装驱动,请确保在这之前驱动已经安装。安装完驱动和cuda之后,还原/etc/default/grub文件,然后重启

添加环境变量

vim ~/.bashrc

export CUDA_HOME=/usr/local/cuda-11.8
export LD_LIBARAY_PATH=$CUDA_HOME/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export PATH=$CUDA_HOME/bin${PATH:+:${PATH}}

执行source ~/.bashrc

cudnn安装

官方安装教程
下载需要的CUDNN版本,执行

apt-get install zlib1g
apt-get install ./下载的cudnn.deb文件
cp /var/cudnn-local-repo-*/cudnn-local-*-keyring.gpg /usr/share/keyrings/
apt-get update
apt search libcudnn*

会看到libcudnn,libcudnn-dev,libcudnn-samples三个包,分别是运行时库,开发库,示例和测试代码,正常情况下安装libcudnn即可。

sudo apt-get install libcudnn8=${cudnn_version}-1+${cuda_version}
sudo apt-get install libcudnn8-dev=${cudnn_version}-1+${cuda_version}
sudo apt-get install libcudnn8-samples=${cudnn_version}-1+${cuda_version}

测试安装是否成功

  • nvidia-smi查看驱动是否安装成功,显示的cuda版本表示最高支持的cuda。
  • nvcc -V查看cuda版本,下载适配版本的pytorch验证是否可调用cuda库。
  • 安装libcudnn-samples测试cudnn是否成功,如何测试请参考文档。

驱动和CUDA卸载

  • runfile安装方式
sudo /usr/local/cuda-X.Y/bin/cuda-uninstaller
sudo /usr/bin/nvidia-uninstall
  • deb包安装方式
sudo apt-get --purge remove "*cuda*" "*cublas*" "*cufft*" "*cufile*" "*curand*" \"*cusolver*" "*cusparse*" "*gds-tools*" "*npp*" "*nvjpeg*" "nsight*" "*nvvm*"sudo apt-get --purge remove "*nvidia*" "libxnvctrl*"sudo apt-get autoremove

其他

非必要,本人在此一起记录下

SSH服务,远程需要

  1. 安装ssh
    apt-get install ssh
    
  2. 配置root允许登录
    vim /etc/ssh/sshd_config
    # PermitRootLogin yes
    # 修改后重启sshd服务
    
  3. 设置开机自启
    systemctl enable ssh
    
  4. 启动ssh服务
    systemctl start ssh
    

cuda容器运行环境,docker需要

官方安装教程
nvidia-container-toolkit用于在容器中使用NVIDIA GPU,包括一个容器运行时库和实用程序。
在这里插入图片描述
容器中有应用程序和cuda,通过docker和nvidia-container-toolkit与宿主机的nvidia driver联系,然后使用显卡。
这里以docker运行环境为例,安装nvidia-container-toolkit。

  1. 安装docker
  2. 安装软件源和CPG Key
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
  1. 更新并安装
apt-get update
apt-get install -y nvidia-container-toolkit

如果是内网环境下,需要下载nvidia-container-toolkit的所有依赖拷贝到内网并apt-get install *.deb,下面是下载某包及其依赖的命令。

apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --no-pre-depends nvidia-container-toolkit | grep -v i386 | grep "^\w")
  1. 设置docker nvidia运行时环境
  • 命令行配置
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
  • 配置文件
    vim /etc/docker/daemon.json,添加如下内容
"runtimes": {"nvidia": {"path": "/usr/bin/nvidia-container-runtime","runtimeArgs": []}}

重新加载配置,重启docker

systemctl daemon-reload
systemctl restart docker
  1. 测试
# --gpus all 所有显卡可用
# --gpus device=1 第二块显卡可用
# --gpus device=0,1 第一块和第二块显卡可用
docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.8.0-runtime-ubuntu20.04 nvidia-smi

出现nvidia-smi命令的执行结果表示安装成功

  1. nvidia/cuda docker仓库
    nvidia/cuda仓库地址
    里面有各版本的已经打好的cuda和cudnn镜像,每个cuda版本对应有三种镜像
  • base
    cuda运行时环境
  • runtime
    从base打包而来,包括cuda数学库、NCCL和cudnn。一般我们拉runtime镜像即可。
  • devel
    从runtime打包而来,包括一些头文件和cuda开发工具,需要依赖做额外的开发,可以拉取这个镜像。
  1. 自己打包nvidia/cuda镜像
    克隆官方的git仓库
    到docker hub创建账户,并新建一个存储库
# 登录docker
docker login -u windcfcd cuda
# 打包windcf/cuda:11.8.0-ubuntu20.04镜像,x86_64
# --push推送到docker hub
# --load保存为本地镜像
./build.sh -d --image-name windcf/cuda --cuda-version 11.8.0 --os ubuntu --os-version 20.04 --arch x86_64 --push

在这里插入图片描述
docker hub结果
在这里插入图片描述

编译安装指定Python版本

ubuntu20.04默认安装的python是3.8.10,如需安装其他版本,可自行下载源码编译。
如果需要安装多版本Python,可以看这里

以安装python3.10.12为例

# 安装依赖
apt update
apt install wget build-essential libreadline-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev zlib1g-dev# python源码
wget https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tgz
# 解压
tar -xzvf Python3.10.12.tgz
# 编译
cd Python-3.10.12/
./configure --prefix=/usr/local/python310 --enable-optimizations
make -j$(nproc)
# 安装
make altinstall

安装完之后python、pip等可执行程序在/usr/local/python310/bin目录下,本人没有覆盖默认的python,使用时注意路径即可。
如果需要设置为默认的python,执行

sudo update-alternatives --install /usr/bin/python3 python3 /usr/local/python310/bin/python3.10 110sudo update-alternatives --config python3

卸载新安装的python

# 卸载
# 如果没有删除源代码目录
sudo make uninstall
# 已删除源代码目录
cd /usr/local/python310/bin && rm -f sudo rm -f 2to3 2to3-3.11 idle3 idle3.11 pip pip3 pip3.10 pip3.11 pydoc3 pydoc3.11 python3 python3.11 python3.11-config python3-config

防火墙配置

ubuntu下iptables配置的规则重启后失效,系统自带了ufw命令配置防火墙,配置命令简单易懂。
使用ufw配置后都会在iptables上体现,重启后有效。

一些心得总结

安装驱动和cuda其实挺简单的,内网可能稍微麻烦点,但本人还是碰到了各种各样的问题,安装完后PC工作站使用一段时间又会卡死,工作站又放在机房,每次重启很麻烦。找不到卡死的原因,推测是驱动的问题,又卸载重装,来来回回遇到很多问题,在这里统一记录下。

  • 关闭系统休眠
  • 关闭自动更新
  • 包冲突错误解决
    在安装各种包的过程中多次遇到版本冲突,apt install --fix-broken无法解决,所有的apt install都不执行,解决办法是使用apt下载需要的包,使用dpkg -i --force-overwrite deb_name强制覆盖安装。
  • 内网安装外网包
    有些包不在ubuntu软件源中,必须要联网下载,本人在外网电脑创建一个和内网软件环境一样的虚拟机,需要连接外网下载的包现在虚拟机中下载后拷贝到内网,主要有两种包。
    • deb包,使用上面提到的下载包及其依赖的命令在外网虚拟机下载后拷贝到内网,apt-get install *.deb
    • python包,有些包也不再pypi源,比如pytorch某些版本,某些包必须从源码编译等,外网使用pip download,拷贝到内网pip install *.whl,也可以将文件上传到内网Nexus Pypi源。
  • 官方文档

最小化安装

ubuntu server识别不到网卡

安装系统后,使用ip a命令发现只有lo本地回环,识别不到网卡,网上搜了挺久并不能解决问题。
猜测应该是缺了网卡驱动,毕竟网卡较新而操作系统较老且是最小化安装,可能并没有带驱动,需要自己下载安装。
lspci查看自己的网卡,结合主板等信息去外网下载对应驱动,拷贝到内网中。本人下载的是RTL8125,安装驱动需要gcc、make等依赖,最小化安装这些都是没有的,需要手动离线安装。

ubuntu server离线安装gcc等依赖

手动下载了ubuntu server离线gcc、make等及其依赖,链接如下

链接:https://pan.baidu.com/s/1sK73grxfqokv0hADUS0DWg?pwd=dqz8
提取码:dqz8

解压后直接dpkg -i *.deb即可,默认ubuntu上好像没unzip命令。

记录一下直接下载某包及其依赖的命令

apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --no-pre-depends libasan5:amd64 | grep -v i386 | grep "^\w")

ubuntu server配置网络

如果安装的是桌面版,可以选择图形化界面配置。
20.04最小化版本配置网络已不再/etc/network/interface中,而在/etc/netplan/xxxx.yaml中,以下是一个配置示例,ipv6相关配置改4为6即可。

# This is the network config written by 'subiquity'
network:ethernets:ens32:dhcp4: noaddresses: [192.168.8.6/24]optional: truegateway4: 192.168.8.2nameservers:addresses: [192.168.8.2]version: 2renderer: networkd

参考

Ubuntu20.04下CUDA、cuDNN的详细安装与配置过程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/922299.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/922299.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入 Linux 文件系统:从数据存储到万物皆文件

深入 Linux 文件系统&#xff1a;从数据存储到万物皆文件 Linux 文件系统是一个精妙而复杂的工程&#xff0c;它像一座图书馆&#xff0c;不仅存放着书籍&#xff08;数据&#xff09;&#xff0c;还有一套高效的卡片索引系统&#xff08;元数据&#xff09;来管理它们。本文将…

C++, ffmpeg, libavcodec-RTSP拉流,opencv实时预览

文章目录RTSPStreamPlayer.cppRTSPStreamPlayer.hmain.cpp编译运行在ffmpeg_rtsp原有的rtsp拉流项目基础上加入了udp连接rtsp&#xff0c;日志模块&#xff0c;opencv实施预览等功能。RTSPStreamPlayer.cpp #include "RTSPStreamPlayer.h" #include <iostream>…

MySQL在Ubuntu 20.04 环境下的卸载与安装

目录 前言&#xff1a;学习引入 1、安装注意事项 2、学习建议 3、MySQL 和 MariaDB 核心概念一&#xff1a;它们是什么&#xff1f; 核心概念二&#xff1a;它们如何工作&#xff1f;&#xff08;“仓库”比喻&#xff09; 核心概念三&#xff1a;为什么它们如此流行&…

BizDevOps 是什么?如何建设企业 BizDevOps 体系

在数字经济加速渗透的今天&#xff0c;企业数字化转型已从 “技术升级” 转向 “价值重构”&#xff0c;单纯的 IT 研发或业务优化已难以适应市场快速变化。业务研发运营一体化&#xff08;BizDevOps&#xff09;作为打通 “业务 - 技术 - 运维” 协同壁垒的核心模式&#xff0…

Mac菜单栏综合工具FancyTool更新啦

本次更新聚焦「轻量体验」深度优化&#xff1a;不仅重构了 CPU 占用逻辑与系统唤醒机制&#xff0c;让后台运行更高效&#xff1b;更让动画交互全程保持丝滑流畅&#xff0c;资源消耗却低到近乎无感 —— 哪怕它常驻菜单栏&#xff0c;你也几乎察觉不到它的存在&#xff0c;既不…

ARM汇编 led

1.相关介绍本次用的开发板是IMX6ULLCPU&#xff1a;NXP i.MX 6ULL Cortex-A7单核处理器&#xff0c;主频 528MHz&#xff08;工业级&#xff09; 或 800MHz&#xff08;商业级&#xff09;467, GBA封装内存&#xff1a;512MB DDR3L RAM&#xff0c;支持高速数据存取。存储&…

弹窗分页保留其他页面勾选的数据(vue)

如图所示&#xff0c;这是个常见的多选todolist不过这里多了个要求&#xff0c;弹窗上下页面切换的时候需要保留勾选结果这其实也不难&#xff0c;但是如果每次都手动写一遍却有点恼人&#xff0c;这次捋一下思路&#xff0c;并把核心代码记录一下&#xff0c;方便下次翻找核心…

分享:一种为蓝牙、WIFI、U段音频发射设备提供ARC回传数字音频桥接功能的方案

随着智能电视、流媒体设备的普及&#xff0c;用户对高质量音频输出的需求激增。为解决多设备协同、无线化传输及ARC高保真音频传输的痛点&#xff0c;纳祥科技推出HDMI ARC音频转换方案&#xff1a;HDMI ARC音频转光纤/同轴/I2S/左右声道&#xff0c;桥接无线音频发射设备&…

在WPF项目中使用阿里图标库iconfont

使用阿里图标库的步骤&#xff1a; 1。从阿里图标库官方网站上下载图标。 2。把阿里图标库&#xff08;WPF中支持.ttf字体文件&#xff09;引入 3。在App.xaml中添加图标的全局样式。推荐在此处添加全局样式&#xff0c;为了保证图标可以在所有窗体中使用。 代码如下&#x…

vue3项目启动流程讲解

Vue 3 项目启动流程详解Vue 3 项目的启动流程相比 Vue 2 有了显著变化&#xff0c;采用了新的应用实例创建方式和组合式 API。下面我将详细讲解 Vue 3 项目的启动过程&#xff0c;并提供一个可视化演示。实现思路创建 Vue 3 应用实例配置根组件和必要的插件挂载应用到 DOM展示启…

【C++】LLVM-mingw + VSCode:Windows 开发攻略

LLVM-mingw 是一个基于 LLVM 项目的开源工具链&#xff0c;用于在类 Unix 系统&#xff08;如 Linux 或 macOS&#xff09;上为 Windows 平台交叉编译应用程序&#xff0c;它结合了 LLVM 编译器基础设施&#xff08;包括 Clang C/C/Objective-C 编译器和 LLD 链接器&#xff0c…

AI内容标识新规实施后,大厂AI用户协议有何变化?(六)科大讯飞

科大讯飞也是国产老将&#xff0c;当年OpenAI横空出世&#xff0c;国内唯有文心和星火能与之一战&#xff0c;早期效果感觉甚至是优于文心的&#xff0c;只是后面再也没有什么大动静出来。讯飞也算大厂了&#xff0c;但跟百度阿里这些老牌互联网门阀相比&#xff0c;还是不够持…

Error: MiniProgramError{“errMsg“:“navigateTo:fail webview count limit exceed“}

这个错误 "navigateTo:fail webview count limit exceed" 是微信小程序中常见的页面栈溢出问题&#xff0c;原因是微信小程序对页面栈深度有默认限制&#xff08;通常为10层&#xff09;&#xff0c;当使用 navigateTo 连续跳转页面导致页面栈超过限制时就会触发。解…

少即是多:从 MPTCP 看优化干预的边界

“对待端到端传输&#xff0c;信息不足就要少干预&#xff0c;越干预越糟糕”&#xff0c;这是我的信条&#xff0c;这次再来说说 MPTCP。 Linux 内核 MPTCP 最好的调度算法就是 default 算法&#xff0c;没有之一&#xff0c;因为它以代价最小&#xff0c;最自然的方式做到了保…

“开源AI智能名片链动2+1模式S2B2C商城小程序”在直播公屏引流中的应用与效果

摘要&#xff1a;本文聚焦于直播公屏引流场景&#xff0c;探讨“开源AI智能名片链动21模式S2B2C商城小程序”如何通过技术赋能与模式创新&#xff0c;重构直播电商的流量获取与转化路径。研究结合案例分析与实证数据&#xff0c;揭示该方案在提升用户互动、优化供应链管理、降低…

基于大数据挖掘的药品不良反应知识整合与利用研究

标题:基于大数据挖掘的药品不良反应知识整合与利用研究内容:1.摘要 随着医疗数据的爆炸式增长&#xff0c;大数据挖掘技术在医疗领域的应用日益广泛。本研究旨在利用大数据挖掘技术对药品不良反应知识进行整合与利用&#xff0c;以提高药品安全性监测和管理水平。通过收集多源异…

国产时序数据库选型指南-从大数据视角看透的价值

摘要&#xff1a;大数据时代时序数据库崛起&#xff0c;工业物联网场景下每秒百万级数据点写入成为常态。Apache IoTDB凭借单节点1000万点/秒的写入性能、毫秒级查询响应和20:1超高压缩比脱颖而出&#xff0c;其树形数据模型完美适配工业设备层级结构。相比传统数据库&#xff…

教你使用服务器如何搭建数据库

数据库是存储和管理数据的核心组件&#xff0c;无论是网站、应用还是企业系统&#xff0c;都离不开数据库的支持。本文将以 莱卡云服务器 为例&#xff0c;教你如何快速搭建常用数据库服务。一、准备工作服务器环境推荐操作系统&#xff1a;Ubuntu 20.04 / Debian 11 / CentOS …

西门子 S7-200 SMART PLC 核心指令详解:从移位、上升沿和比较指令到流水灯控制程序实战

对于 PLC 初学者来说&#xff0c;“流水灯” 是绕不开的经典入门案例 —— 它看似简单&#xff0c;却浓缩了 PLC 编程的核心逻辑&#xff1a;初始化、时序控制、指令应用与状态判断。今天我们就以 S7-200 SMART 为例&#xff0c;逐行拆解一段 8 位流水灯控制程序&#xff0c;带…

P4342 [IOI 1998] Polygon -普及+/提高

P4342 [IOI 1998] Polygon 题目描述 题目可能有些许修改&#xff0c;但大意一致。 Polygon 是一个玩家在一个有 nnn 个顶点的多边形上玩的游戏&#xff0c;如图所示&#xff0c;其中 n4n 4n4。每个顶点用整数标记&#xff0c;每个边用符号 &#xff08;加&#xff09;或符号 *…