福生无量摸鱼天尊

WSL2搭建cuda-triton开发环境

349
0

先用了vmware + ubuntu的方法,结果发现现在gpu无法透传到vmware的虚拟机里

故此使用wsl2的开发环境,后续会更新许多更舒服丝滑的操作

WSL2

查看所有发行版本

wsl --list --online

安装指定版本

wsl --install Ubuntu-22.04

安装成功之后设置一下账户密码就行

安装miniconda

用脚本安装

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

chmod +x Miniconda3-latest-Linux-x86_64.sh

./Miniconda3-latest-Linux-x86_64.sh

source ~/.bashrc

conda list

用脚本安装就一直yes就行

安装CUDA Toolkit 和 cudnn

使用 nvidia-smi查看cuda版本,在下面链接选择相应的版本

https://developer.nvidia.com/cuda-toolkit-archive

选择好之后下面有一行一行的代码,逐步运行即可

~/.bashrc中添加路径,注意版本的区别:

export PATH=/usr/local/cuda-12.9/bin:$PATH

export LD_LIBRARY_PATH=/usr/local/cuda-12.9/lib64:$LD_LIBRARY_PATH

是toolkit用wsl-Ubuntu版本,默认已经安装了。此时使用命令来验证:

(base) moyu@DESKTOP-5C0FGMS:~$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2025 NVIDIA Corporation
Built on Tue_May_27_02:21:03_PDT_2025
Cuda compilation tools, release 12.9, V12.9.86
Build cuda_12.9.r12.9/compiler.36037853_0

迁移

注意:这是非必要操作,如果迁移wsl系统,如果迁移到硬盘里,极大可能是无法编译源码的,请尽可能放在pcie设备中。

wsl的系统放在:

C:\Program Files\WindowsApps\CanonicalGroupLimited.安装的ubuntu的版本__xxxxxxxxx

有需要可以备份

先查看有哪些系统

C:\Users\32341>wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-22.04    Running         2

然后关闭实例

C:\Users\32341>wsl --shutdown

到处系统的镜像,具体来说为wsl --export 系统实例 路径

wsl --export Ubuntu-22.04 F:\WSL\Ubuntu-22.04.tar

导入实例

wsl --import 虚拟机名字 安装路径 tar包路径 --version 2

请注意这里的文件夹可以自己设定,比如说我执行的是:

wsl --import ubuntu F:\ubuntuWSL F:\WSL\Ubuntu-22.04.tar --version 2

image.png

设置默认访问用户,不然root和用户的环境不一样

ubuntu2204.exe config --default-user moyu

我这里不知道为什么,用户设定不了,无所谓,su moyu即可

wsl启动指定实例:

wsl -d <指定的实例名字>

image.png

用一段时间没问题了,可以选择注销原来的实例

wsl --unregister Ubuntu-22.04

注意,如果你两个都stop的情况下,开启非主实例,会把主实例也开启

image.png

而如果你只开了主实例,那么唤醒的只会是主实例

image.png

vscode 连接wsl2

在命令行中选择刚刚的wsl2的系统

使用su命令避开root用户,然后查看环境是否正确

windowvscode可以直接连接wsl2,所以只要保持wsl2的干净即可

sudo apt-get remove --purge openssh-server   ## 先删ssh
sudo apt-get install openssh-server          ## 再安装ssh

当左下角出现蓝色的连接即可。

终端翻墙

由于WSL2是通过虚拟化技术实现的,所以翻墙有点不一样,本质是两套系统在同一个局域网内,首先要找到ubuntu的IP:

$ cat /etc/resolv.conf
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 172.xxx.xxx.1
$ export ALL_PROXY="http://172.xxx.xxx.1:17890"

这里需要注意的是端口号17890是外部软件的端口

将上面的过程写入一个 bash 脚本,可以轻松的实现一键配置代理:

"~/.bashrc"
host_ip=$(cat /etc/resolv.conf |grep "nameserver" |cut -f 2 -d " ")
export ALL_PROXY="http://$host_ip:17890"

脚本通过 cat /etc/resolv.conf 来获取 DNS 服务器,也就是 Windows 的 IP,再将其中的 IP 部分截取出来,加上代理客户端的端口

cuda hello world

新建一个hello_world.cu文件,输入:

#include <cuda_runtime.h>

#include <iostream>
__global__ void hello_world(void) {
  printf("block idx:%d thread idx: %d\n", blockIdx.x, threadIdx.x);
  if (threadIdx.x == 0) {
    printf("GPU: Hello world!\n");
  }
}

int main(int argc, char **argv) {
  printf("CPU: Hello world!\n");
  hello_world<<<
      1, 1>>>();  
  cudaDeviceSynchronize();
  if (cudaGetLastError() != cudaSuccess) {
    std::cerr << "CUDA error: " << cudaGetErrorString(cudaGetLastError())
              << std::endl;
    return 1;
  } else {
    std::cout << "GPU: Hello world finished!" << std::endl;
  }
  std::cout << "CPU: Hello world finished!" << std::endl;
  return 0;
}

编译运行

nvcc -g -G -O0 -o hello course1/hello_world.cu

./hello 

image.png

wsl权限报错

如果在wsl运行发现权限报错,请务必查看文件的归属是那个用户

(base) moyu@DESKTOP-5C0FGMS:~/cuda_code$ ls -ld .
drwxr-xr-x 14 root root 4096 Aug  4 00:19 .
(base) moyu@DESKTOP-5C0FGMS:~/cuda_code$ sudo chown -R moyu:moyu .

只要将其归到现在用户,就可以执行了

其他更多的请查看【CUDA从入门到入土】二、CUDA调试和必知必会


下面可以不用看了

VMware + ubuntu 搭建cuda triton环境(❌)

垃圾,用不了,因为虚拟机无法将gpu虚拟到虚拟机的系统里

sudo apt install gcc

翻墙设置

vmware 虚拟机 --> 设置

image.png

window + R,输入cmd,打开终端,然后输入ipconfig,查看ipv4

image.png

然后在Ubuntu中设置,这里的端口号根据梯子软件来设定,记得梯子软件要开启局域网连接

image.png

安装chrome

搜索官网直接下载,然后输入

sudo apt install ./google-chrome-stable_current_amd64.deb

image.png