Linux CUDA配置
nvidia-smi和驱动通信失败
-
当我重启服务器后,输入
nvidia-smi
命令后,出现报错:NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
-
这个时候查询nvcc会发现其实驱动相关的东西其实是还在的:
1 2 3 4 5 6 7
nvcc -V # 输入命令后,出现: nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2022 NVIDIA Corporation Built on Tue_May__3_18:49:52_PDT_2022 Cuda compilation tools, release 11.7, V11.7.64 Build cuda_11.7.r11.7/compiler.31294372_0
-
接着查询当前的驱动版本:
1 2 3
ls /usr/src | grep nvidia # 输入和出现: nvidia-515.43.04
-
记住上面的数字,自己是多少就是多少:
-
输入:
1 2 3
sudo apt-get install dkms # then sudo dkms install -m nvidia -v 515.43.04
-
等待安装完成即可
Linux网络配置
内网穿透
最近在实验室服务器上搭建了大模型在线体验服务,但仅限校园网用户可以访问,无法为校外用户提供服务,恰好我们有一台腾讯的云服务器,前期我们尝试在云服务器上配置校园网,但校园网的映射比较固定导致不仅没能成功,还停掉了外网的地址,不得不重启服务器。
之后我们发现了新的,更简单的免费方法,现记录如下:
-
拥有外网ip的服务器,假设其公网ip为:x.x.x.x
-
需要被映射的内网服务器,假设其内网ip为:y.y.y.y
-
假设公网被访问的端口为8888,内网需要被映射的端口为9999,则:
1 2 3
# 内网服务器输入以下命令,让外网服务器的8888端口可访问内网的9999端口 ssh -o ServerAliveInterval=60 -f -N -R 8888:y.y.y.y:9999 root@x.x.x.x # 回车后需要输入外网的账户密码,注意这里默认账户名是root,请根据实际情况进行修改
-
在公网服务器上输入:
1 2
curl http://127.0.0.1:8888 # 一般会出现所映射到端口的信息,例如映射22,则出现SSH相关的信息
-
之后,继续在公网服务器上输入:
1 2 3 4
sysctl -w net.ipv4.conf.eth0.route_localnet=1 # 允许127回环转发 iptables -t nat -A PREROUTING -p tcp --dport 8888 -j DNAT --to-destination 127.0.0.1:8888 # 表示让公网服务器允许将8888端口的请求转发到127回路上
-
最后,按照请求内网服务器一样请求外网服务器即可,如:x.x.x.x:8888
端口防火墙
-
打开某个端口的防火墙
1 2
sudo firewall-cmd --zone=public --add-port=4399/tcp --permanent sudo firewall-cmd --reload
-
查看所有打开的端口
1 2 3
sudo firewall-cmd --zone=public --list-ports # 或者限定端口的开放协议 如tcp sudo firewall-cmd --zone=public --list-ports tcp
配置ipv6:
参考: asimok’s blog
-
检查是否已经启用ipv6支持
1
sudo cat /proc/net/if_inet6
-
如果结果不为空,直接下一步,否则:
1 2 3 4 5 6 7 8
sudo vim /etc/sysctl.conf # 添加以下内容: net.ipv6.conf.all.disable_ipv6 = 0 net.ipv6.conf.default.disable_ipv6 = 0 # 之后,执行: sudo sysctl -p # 检查是否启用: sudo cat /proc/net/if_inet6
-
先找一个比较快的ipv6的DNS,比如清华源等;
-
修改配置文件,添加DNS:
1 2 3
sudo vim /etc/systemd/resolved.conf # 添加DNS,比如: DNS=2001:67c:2b0::6 2001:67c:2b0::4
-
重启DNS服务:
1 2
sudo systemctl restart systemd-resolved sudo systemctl enable systemd-resolved
-
启动配置文件:
1 2 3
sudo mv /etc/resolv.conf /etc/resolv.conf.bak # 先将原来的文件备份 sudo ln -s /run/systemd/resolve/resolv.conf /etc/
-
检查是否启用成功:
1
sudo cat /etc/resolv.conf
ipv4地址未出现
注意,以下操作仅在我遇到的问题中可做解决方案,若涉及生产等重要场景,请联系网络和系统管理员协助
因机房停电维护较长时间,因此再次开机时有两个服务器出现了不同的问题,其中一台输入ifconfig
后只有ipv6地址
此时,输入:
|
|
发现只有lo的地址,也就是local地址,因此可能需要手动配一下ipv4的地址,但这里需要注意两点:
- 不一定网卡就叫eth0;
- 除非机器有申请的固定ip,否则不要直接按照网上给的address netmask gateway修改
因此,首先查看网卡设备名字:
|
|
但有的人拥有自己固定的IP,不需要DHCP去分配,则:
|
|
之后进行重启即可:
|
|
开机进入紧急模式
同上,另一台机器开机后,出现: welcome to emergency mode
,这大概率是因为写入的自动挂载脚本问题导致的:
输入:
|
|
查看一下当初挂载了哪些磁盘,尤其是有的磁盘UUID可能会发生变化,从而导致自检不通过
个人做法:
返回命令行,输入:
|
|
发现原本写在fstab中的有一项磁盘路径没出现在这里,我这里没出现的磁盘叫作data2
,那么:
|
|
Linux账户配置
root
Ubuntu默认是没有root的,而是以sudo用户来代替,这种方式在绝大多数时候是安全可用的,但当sudo用户有操作不当时,会导致系统出现无法修复的问题,因此在有这种需要时,可以提前设置root用户。
-
在具有sudo权限的用户下进行操作;
-
设置root账户密码:
1
passwd root
-
编辑配置文件:
1 2 3 4
sudo vim /etc/ssh/sshd_config # 然后输入以下命令: PermitRootLogin yes PasswordAuthentication yes
-
重启ssh服务:
1
systemctl restart ssh
-
需要注意,root用户具有完全的权限,比一般的sudo用户更高,使用时务必小心。
sudo
在某个管理员账户下,给某个用户分配sudo权限,一种简单的方式是将其添加到sudo的组里面;
-
查看sudo用户:
1 2 3 4 5 6 7 8
# 查看sudo用户有哪些 # 先安装一个包 sudo apt-get install members # 再查看 members sudo # 或者在某个用户的终端下输入groups groups # 以查看该用户当前所属的组
-
将用户添加到sudo组:
1 2
sudo usermod -aG sudo username # 将username替换为用户账户名
-
将用户从sudo组移除:
1
sudo deluser username sudo
-
禁止用户登录:
1 2 3
sudo passwd -l username # or sudo usermod -L username
-
恢复用户登录:
1 2 3
sudo passwd -u username # or sudo usermod -U username
其他
利用Docker配置私人网盘
-
首先拉取docker:
1
docker pull cloudreve/cloudreve
-
接着创建必要的文件:
1 2 3
mkdir -vp cloudreve/{uploads,avatar} \ && touch cloudreve/conf.ini \ && touch cloudreve/cloudreve.db
-
然后启动docker:
-
先获取刚刚创建文件的路径:
pwd
,假设返回的路径是:/data0/driver
-
然后配置文件,并启动:
1 2 3 4 5 6 7 8 9
sudo docker run -d \ --name docker-image-name \ -p 5212:5212 \ --mount type=bind,source=/data0/driver/cloudreve/conf.ini,target=/cloudreve/conf.ini \ --mount type=bind,source=/data0/driver/cloudreve/cloudreve.db,target=/cloudreve/cloudreve.db \ -v /data0/driver/cloudreve/uploads:/cloudreve/uploads \ -v /data0/driver/cloudreve/avatar:/cloudreve/avatar \ -e TZ="Asia/Shanghai" \ cloudreve/cloudreve:latest
-
在新版的cloudreve中,查看docker日志是没有初始管理员密码的,因此要进入docker里面重置:
1
docker exec -it docker-image-name ./cloudreve --database-script ResetAdminPassword
-
即可查看到到新的初始密码,初始账户为:
admin@cloudreve.org
-
常用docker命令:
1 2 3 4
docker ps # 查看运行中容器 docker stop xxxx docker rm -f xxxx docker restart xxxx