难道他真的是装环境的天才(双系统ubuntu24.04+cuda+pytorch+cudnn安装)

最近几乎成为了环境配置领域大神,所谓熟能生巧,之前我在windows搭配了cuda+pytorch开发环境,但是无法实现cuda c编程。后面在wsl2上面安装了cuda+pytorch+cudnn,这次成功实现了cuda c编程,感谢GNU Linux开源系统。

在此之后,我又一次挑战自我,这次是在双系统上面挑战环境配置。当初综合考虑各种原因,给装的是ubuntu24.04LTS版本,虽然版本比较新,但是更加面向未来的开发环境。

配置双系统是一件十分麻烦的事情,单单因为BIOS启动设置的问题,我当初装就失败了两次。后面还是用的是ubuntu24.04,首先不像windows,上面连英伟达驱动都没的。

因此首先要安装英伟达驱动。安装命令如下:

sudo apt-get update
sudo apt install nvidia-utils-535-server

安装完成后检查一下:

nvidia-smi

有正确输出就表明安装好了。

后面再去安anaconda具体安装命令如下:

wget https://repo.anaconda.com/archive/Anaconda3-2023.07-1-Linux-x86_64.sh

chmod +x Anaconda3-2023.07-1-Linux-x86_64.sh

./Anaconda3-2023.07-1-Linux-x86_64.sh

./Anaconda3-2023.07-1-Linux-x86_64.sh

安装好后,要激活一下。

source ~/.bashrc
conda --version

后面新建个环境并启动

conda create --name myenv python==3.8
conda activate myenv

同时还要记得在ubuntu上面安装vscode,vscode可视化程度比vim要好。

下面就是安装cuda了,这里的安装命令如下:

sudo apt-get install nvidia-cuda-toolkit

我用这个命令安装的是cuda12.2,算是比较新的版本,颇为神奇装cuda的时候特别的快,居然几分钟内就全部完成了。安装好后,新建一个.cu文件在命令行里面跑下就行了。

#include <stdio.h>
#include <cuda_runtime.h>
 
// CUDA 核函数,用于向量加法
__global__ void vectorAdd(const float *A, const float *B, float *C, int numElements) {
    int i = blockDim.x * blockIdx.x + threadIdx.x;
    if (i < numElements) {
        C[i] = A[i] + B[i];
    }
}
 
int main() {
    // 定义向量大小
    int numElements = 50000;
    size_t size = numElements * sizeof(float);
 
    // 分配主机内存
    float *h_A = (float *)malloc(size);
    float *h_B = (float *)malloc(size);
    float *h_C = (float *)malloc(size);
 
    // 初始化主机数据
    for (int i = 0; i < numElements; ++i) {
        h_A[i] = rand() / (float)RAND_MAX;
        h_B[i] = rand() / (float)RAND_MAX;
    }
 
    // 分配设备内存
    float *d_A, *d_B, *d_C;
    cudaMalloc((void **)&d_A, size);
    cudaMalloc((void **)&d_B, size);
    cudaMalloc((void **)&d_C, size);
 
    // 将数据从主机复制到设备
    cudaMemcpy(d_A, h_A, size, cudaMemcpyHostToDevice);
    cudaMemcpy(d_B, h_B, size, cudaMemcpyHostToDevice);
 
    // 定义线程块和网格大小
    int threadsPerBlock = 256;
    int blocksPerGrid = (numElements + threadsPerBlock - 1) / threadsPerBlock;
 
    // 启动 CUDA 核函数
    vectorAdd<<<blocksPerGrid, threadsPerBlock>>>(d_A, d_B, d_C, numElements);
 
    // 将结果从设备复制回主机
    cudaMemcpy(h_C, d_C, size, cudaMemcpyDeviceToHost);
 
    // 验证结果
    for (int i = 0; i < numElements; ++i) {
        if (fabs(h_A[i] + h_B[i] - h_C[i]) > 1e-5) {
            fprintf(stderr, "Result verification failed at element %d!\n", i);
            exit(EXIT_FAILURE);
        }
    }
 
    printf("Test PASSED\n");
 
    // 释放设备内存
    cudaFree(d_A);
    cudaFree(d_B);
    cudaFree(d_C);
 
    // 释放主机内存
    free(h_A);
    free(h_B);
    free(h_C);
 
    return 0;
}

后面的结果如下:

显示是test passed.

接下来,再用一个指令检查以下

nvidia-smi

下面就是麻烦的pytorch安装了,建议详细查看官网的安装命令。因为cuda是向下兼容的,我安装的是cuda12.2,没有在pytorch官网找到相应的pytorch,因此就选择了cuda12.1匹配的pytorch.

Previous PyTorch Versions | PyTorch

安装命令具体如下:

pip install torch==2.2.0 torchvision==0.17.0 torchaudio==2.2.0 --index-url https://download.pytorch.org/whl/cu121

这个安装要下一堆东西,最终我是花了三个多小时,为什么这么慢,是因为新安的双系统还没有在linux上面装魔法,但是又懒得装了,就显得很慢。换源的话我也没有试,有些懒。

安装好后,跑一个代码就可以检查了

import torch
 
# 检查 PyTorch 版本
print(torch.__version__)
 
# 检查 CUDA 是否可用
print(torch.cuda.is_available())
 
# 检查 cuDNN 版本
print(torch.backends.cudnn.version())
 
# 检查当前 GPU 设备
print(torch.cuda.current_device())
 
# 检查 GPU 名称
print(torch.cuda.get_device_name(0))

结果如下:

现在已经逐渐习惯用命令行来编译和跑代码了,想来我大一的时候还得去b站看视频配置vscode环境呢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值