admin 管理员组文章数量: 887055
不要轻易Update or Upgrate,导致NVIDIA驱动不兼容 !!!
不要安装最新的版本,版本兼容问题应该看发行时间:比如NVIDIA Driver的的发行时间应晚于Ubuntu系统发行时间
安装不成功,大概率是版本不兼容问题、硬件问题、产品太新使用方案不同以往(如A100显卡)
1、Ubuntu 22.04 镜像文件下载、制作启动盘
0. 慎重安装Ubuntu 20.04,其在服务器端经常有bug,安装完之后会黑屏!
1. 官网下载镜像文件:https://releases.ubuntu.com/jammy/ubuntu-22.04.4-desktop-amd64.iso
2. 推荐 ventoy 软件写入镜像!
3. 或者用 UltraISO 制作U盘安装Ubuntu(不推荐):
打开iso -> 启动 -> 写入硬盘映像 -> 写入方式: RAW
2、服务器安装系统
1. 系统安装时不要插网线联网,防止在安装过程中自动更新;安装完系统后再插网线联网!!!
2. F11/F10选择U盘启动,按照步骤安装
3. 建议磁盘分区:boot 4G, swap 60G, efi 1G, 剩下给/,创建用户数据存储文件夹(e.g., /user_data)并分区挂载
4. 对于覆盖之前的系统,直接选择 Erase and reinstall,但会自动磁盘分区,可以安装完系统后再挂载
3、开启SSH、安装NVIDIA驱动、安装向日葵远程连接
1. 开启ssh: sudo apt-get install openssh-server
sudo systemctl start ssh
sudo systemctl enable ssh
sudo systemctl status ssh
sudo systemctl restart ssh (可选)
申请静态IP,便于远程连接
2. 安装nvidia-driver(安装dkms,否则重启会自动升级内核,导致驱动不匹配):
方式一:官网下载NVIDIA驱动: https://www.nvidia.com/download/driverResults.aspx/221949/en-us
(安装g++等、禁用Nouveau等,可参考博客1)
安装dkms,这个可以自动配置内核和驱动匹配
sudo bash NVIDIA-Linux-x86_64-535.161.08.run
方式二:Ubuntu系统推荐安装(慎用,可能导致驱动和网络全崩):首先查看合适的驱动程序:ubuntu-drivers devices (找到合适的版本,建议参考一下NVIDIA官网驱动版本,这种方式经常会安装显卡不支持的小版本)
sudo apt install nvidia-driver-xxx (e.g., xxx为535.161.08)
禁用Nouveau驱动程序防止冲突:
sudo bash -c "echo 'blacklist nouveau' >> /etc/modprobe.d/blacklist.conf"
sudo bash -c "echo 'options nouveau modeset=0' >> /etc/modprobe.d/blacklist.conf"
更新initramfs :
sudo update-initramfs -u
重启系统,生效,nvidia-smi
注:(1) 如果不小心update或upgrade导致驱动损坏,建议先卸载原驱动、重启后再重新安装驱动;或重装系统
卸载驱动命令:sudo apt-get remove --purge nvidia*
(2) gpu-burn 做gpu算力、压力测试
(3) 正确的安装需要:内核和驱动版本配对上
(4) .run安装时,如果图形界面安装报错,可能命令行方式不报错
(5) A100系列以上显卡,不使用多实例GPU模式请禁用MIG,否则不加以配置,pytorch无法正常调用GPU
3. 安装向日葵:
官网下载ubuntu的 .deb 文件
sudo dpkg -i xxx.deb
设置开机自启动、验证码永不更新
博客1
4、硬盘挂载到用户文件夹
0. 如果想把多个硬盘挂载到同一个目录(e.g., /home),在装系统分区时,先把一个磁盘挂载到/home(一般系统会自动分配),
安装完成后再把其他硬盘挂载到这个目录(可以做逻辑卷)
1. 一个硬盘挂载到一个文件夹:
创建文件夹: sudo mkdir -p /user_folder
格式化硬盘分区(可选):sudo mkfs.ext4 /dev/sdb1
先卸载已有的挂载:sudo umount /old_folder
挂载到新文件夹:sudo mount /dev/sdb1 /user_folder
配置开机自动挂载:获取UUID:sudo blkid /dev/sdb1
sudo vim /etc/fstab
添加一下内容到末尾:UUID=<UUID> /mnt/new_data ext4 defaults 0 2
2. 两块硬盘挂载到一个文件夹(使用 LVM(逻辑卷管理)):
sudo apt install lvm2
初始化为物理卷:sudo pvcreate /dev/sda /dev/sdb
将物理卷合并到一个卷组中,假设卷组名为 vg0:sudo vgcreate vg0 /dev/sda /dev/sdb
创建逻辑卷:sudo lvcreate -l 100%FREE -n lv0 vg0
格式化逻辑卷:sudo mkfs.ext4 /dev/vg0/lv0
挂载逻辑卷:sudo mkdir /user_folder2
sudo mount /dev/vg0/lv0 /user_folder2
自动挂载:获取UUID: sudo blkid /dev/vg0/lv0
sudo vim /etc/fstab
UUID=<UUID> /user_folder2 ext4 defaults 0 2
5、Ubuntu新建用户、设置目录和权限
1. 创建存储所有用户数据的文件夹:sudo mkdir user_folder
2. 创建新用户并指定目录:sudo adduser --home /user_folder/newuser newuser (不加--home,默认在/home)
3. 设置每个用户的主目录只有该用户可以访问:sudo chmod 700 /user_folder/newuser
4. 确保新用户的主目录属于该用户:sudo chown newuser:newuser /user_folder/newuser
sudo chown -R $(whoami):$(whoami) /user_folder/newuser
5. 删除用户:sudo userdel -r newuser
6、建议Docker管理 (权限不够用sudo docker) (使用之前先查其他资料,结合使用!)
1. Docker(容器化技术)相比于虚拟机技术(如Vmware)更加轻量化,建立在内核层之上;支持一键打包;Docker创建新容器之后,具有独立的操作系统(如ubuntu22.04),这与主操作系统(如ubuntu22.04)是相互独立的。
2. 安装Docker
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common # 安装必要的软件包
# 添加Docker的官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加Docker APT源
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装Docker
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
# 启动Docker服务
sudo systemctl start docker
# 设置Docker开机自启动
sudo systemctl enable docker
3. 设置非root用户也具有docker命令权限 (这样每个用户可以自己建立独立的docker container)
sudo gpasswd -a newuser docker
newgrp docker
4. 拉取镜像并创建Docker容器
# 去 Docker Hub 上找,同样的镜像拉取一次就行
sudo docker pull ubuntu:22.04 或 sudo docker pull pytorch/pytorch:1.10.0-cuda11.3-cudnn8-devel 等等
# 为 newuser 创建一个容器,并将 /user_folder/newuser 挂载到容器的 /home/newuser
docker run -d --name newuser_container -v /user_folder/newuser:/home/newuser ubuntu:22.04
# 为容器设置SSH服务
docker exec -it newuser_container bash # 进入容器
apt-get install -y openssh-server
service ssh start
exit # 退出容器
5. 进入每个容器并设置用户密码
docker exec -it newuser_container bash # 进入容器
passwd # 设置密码
exit # 退出容器
6. 测试容器正常运行,并且用户的数据目录正确挂载
docker exec -it newuser_container ls /home/newuser
7. 一些其他(必要的)操作
# Docker容器在服务器重启后自动启动
docker update --restart unless-stopped newuser_container
sudo reboot, docker ps # 重启后,检查容器状态
# 将主系统上的文件复制到容器中:
docker cp demo.sh newuser_container:/root/demo.sh
docker exec newuser_container chmod +x /root/demo.sh # 设置权限
# 连接容器SSH
container_ip=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' newuser_container) # 获取容器ip地址
ssh newuser@${container_ip}
# 手动重启容器
docker restart newuser_container
docker ps # 检查容器状态
8. pycharm调试容器中的python项目
推荐的方法是在主系统上安装和使用PyCharm,并通过远程连接到Docker容器中的Python环境。
File > Settings > Project > Project Interpreter > Add > Docker > Docker中的conda/envs/myenv/bin/python
Docker参考1
Docker参考2
Docker参考3
7、CUDA、CuDNN安装 (可选,Anaconda虚拟环境下安装pytorch可自动创建CUDA和CuDNN相关依赖,但是有些包的安装和使用还是依赖于CUDA驱动和CuDNN,建议安装)
1. 参考博客1 安装CUDA、CuDNN
2. 注意:(1) CUDA添加环境变量给当前用户的步骤为(好处是:系统安装多个版本的CUDA,每个用户各自链接CUDA):
vim ~/.bashrc
# 在该文件的最后添加下面两行
# `注意:下面两行命令的cuda-x.x需要根据自己安装的版本号进行修改
export PATH=/usr/local/cuda-12.1/bin:${PATH}
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:${LD_LIBRARY_PATH}
# 使得修改后的环境变量生效
source ~/.bashrc
(2) 希望所有用户都能够使用CUDA的配置为:
sudo vim /etc/profile
# 在该文件的最后添加下面两行
# `注意:下面两行命令的cuda-x.x需要根据自己安装的版本号进行修改
export PATH=/usr/local/cuda-12.1/bin:${PATH}
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:${LD_LIBRARY_PATH}
# 刷新配置文件:使更改立即生效
source /etc/profile
验证:nvcc -V
8、Anaconda安装(多种安装方式)
1. 安装anaconda:
官网下载包,安装:bash Anaconda3-2024.02-1-Linux-x86_64.sh
2. root用户安装,并设置其他用户也能使用
# 将Anaconda目录权限更改为允许其他用户读取和执行
sudo chmod -R a+rx /path/to/anaconda
# 将Anaconda的bin目录添加到所有用户的PATH环境变量中
# 在/etc/profile文件或/etc/profile.d目录下创建一个新的脚本文件,如anaconda.sh
export PATH="/path/to/anaconda/bin:$PATH"
3. 建议每个用户自己安装自己的anaconda环境,避免环境误删
如果root用户设置了所有用户的anaconda,但是用户自己也安装了anaconda,则可以去修改用户的PATH环境变量,默认用户自己安装的anaconda优先级更高
4. 直接选择Anaconda的多用户安装模式
# 安装Anaconda时选择安装路径为公共路径(如/opt/anaconda),并配置合适的权限
sudo bash Anaconda3-*.sh
# 将Anaconda目录权限更改为允许其他用户读取和执行
sudo chmod -R a+rx /opt/anaconda
# 将Anaconda的bin目录添加到所有用户的PATH环境变量中
export PATH="/opt/anaconda/bin:$PATH"
9、深度学习模型测试
1. conda create --name py39 python=3.9
2. e.g. conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia
3. 测试代码:
import time
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
# 超参数设置
batch_size = 64
learning_rate = 0.01
epochs = 10
# 使用CUDA(如果可用)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(device)
# 数据加载和预处理
transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.5,), (0.5,))
])
train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
train_loader = DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True)
test_dataset = datasets.MNIST(root='./data', train=False, download=True, transform=transform)
test_loader = DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False)
# 简单的神经网络模型
class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(28 * 28, 512)
self.fc2 = nn.Linear(512, 512)
self.fc3 = nn.Linear(512, 512)
self.fc4 = nn.Linear(512, 512)
self.fc5 = nn.Linear(512, 512)
self.fc6 = nn.Linear(512, 10)
def forward(self, x):
x = x.view(-1, 28 * 28)
x = torch.relu(self.fc1(x))
x = self.fc2(x)
x = self.fc3(x)
x = self.fc4(x)
x = self.fc5(x)
x = self.fc6(x)
return x
# 初始化模型、损失函数和优化器
model = SimpleNN().to(device)
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=learning_rate)
# 训练函数
def train():
model.train()
for epoch in range(epochs):
start_time = time.time()
for batch_idx, (data, target) in enumerate(train_loader):
data, target = data.to(device), target.to(device)
optimizer.zero_grad()
output = model(data)
loss = criterion(output, target)
loss.backward()
optimizer.step()
end_time = time.time()
print(f"Training Time: {end_time - start_time:.2f} seconds")
# 测试函数
def test():
model.eval()
correct = 0
total = 0
with torch.no_grad():
for epoch in range(epochs):
start_time = time.time()
for data, target in test_loader:
data, target = data.to(device), target.to(device)
output = model(data)
_, predicted = torch.max(output.data, 1)
total += target.size(0)
correct += (predicted == target).sum().item()
end_time = time.time()
print(f"Inference Time: {end_time - start_time:.2f} seconds")
print(f'Accuracy: {100 * correct / total:.2f}%')
# 执行训练和测试
if __name__ == "__main__":
train()
test()
10、一切安装就绪之后,禁用一切更新(包括系统自动更新)
1. 禁用内核更新
查看正在使用的内核版本:uname -r
查看正在使用的内核包(替换成上述搜索到的版本):dpkg --get-selections | grep 6.2.0-26-generic
禁止内核更新(替换成上述搜索到的软件包):sudo apt-mark hold linux-headers-6.2.0-26-generic linux-image-6.2.0-26-generic linux-modules-6.2.0-26-generic linux-modules-extra-6.2.0-26-generic
检查状态:dpkg --get-selections | grep 6.2.0-26-generic
若要重新开启内核更新(替换成搜索到的软件包):sudo apt-mark install linux-headers-6.2.0-26-generic linux-image-6.2.0-26-generic linux-modules-6.2.0-26-generic linux-modules-extra-6.2.0-26-generic
若自动更新了内核版本导致驱动不可用,查看博客2
2. 禁用系统自动更新等等
博客2
版权声明:本文标题:万字长文详解:GPU服务器Ubuntu系统制作与安装、磁盘分区、驱动配置、SSH、向日葵远控、用户管理、Docker管理、CUDA安装、Anaconda安装、深度学习模型测试 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1734952445h1682470.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论