当前位置: 首页 > article >正文

WSL Ubuntu 安装 CUDA 教程

WSL Ubuntu 安装 CUDA 教程

    • 1. 概述
    • 2. 准备工作
    • 3. 删除旧的 GPG 密钥
    • 4. 安装 CUDA Toolkit
      • 4.1 使用 WSL-Ubuntu 包安装(推荐)
    • 5. 设置环境变量
    • 6. 注意事项
    • 7. 参考链接
    • 8. 总结

1. 概述

随着 WSL 2 的推出,Windows 用户现在可以在 Windows 子系统 for Linux (WSL) 中运行 Linux 应用程序,并且 NVIDIA 已经为 WSL 2 提供了完整的 CUDA 支持。这意味着你可以在 WSL 2 环境中运行和开发 CUDA 应用程序,而无需修改代码。本文将详细介绍如何在 WSL Ubuntu 中安装 CUDA Toolkit,并避免常见的安装错误。

2. 准备工作

在开始安装之前,请确保你已经完成以下准备工作:

  1. 安装 WSL 2:确保你的 Windows 系统已经安装了 WSL 2,并且已经安装了 Ubuntu 发行版。
  2. 安装最新的 NVIDIA 驱动程序:确保你的 Windows 系统已经安装了最新的 NVIDIA GPU 驱动程序。WSL 2 中的 CUDA 支持依赖于 Windows 主机上的 NVIDIA 驱动程序。

3. 删除旧的 GPG 密钥

在安装 CUDA Toolkit 之前,建议先删除旧的 GPG 密钥,以避免潜在的冲突。你可以通过以下命令删除旧的 GPG 密钥:

sudo apt-key del 7fa2af80

4. 安装 CUDA Toolkit

4.1 使用 WSL-Ubuntu 包安装(推荐)

NVIDIA 提供了一个专门为 WSL-Ubuntu 设计的 CUDA Toolkit 安装包,该安装包不会覆盖 WSL 2 环境中已经映射的 NVIDIA 驱动程序。以下是安装步骤:

  1. 下载并安装 CUDA Toolkit

    wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
    sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
    wget https://developer.download.nvidia.com/compute/cuda/12.8.0/local_installers/cuda-repo-wsl-ubuntu-12-8-local_12.8.0-1_amd64.deb
    sudo dpkg -i cuda-repo-wsl-ubuntu-12-8-local_12.8.0-1_amd64.deb
    sudo cp /var/cuda-repo-wsl-ubuntu-12-8-local/cuda-*-keyring.gpg /usr/share/keyrings/
    sudo apt-get update
    sudo apt-get -y install cuda-toolkit-12-8
    
  2. 验证安装

    安装完成后,你可以通过以下命令验证 CUDA 是否安装成功:

    nvcc --version
    

    如果安装成功,你应该能够看到 CUDA 编译器的版本信息。

  3. 检查 CUDA 版本信息

    你还可以通过以下命令查看详细的 CUDA 版本信息:

    cat /usr/local/cuda/version.json
    

    该命令会输出一个 JSON 文件,其中包含了 CUDA 及其相关组件的版本信息。例如:

    {"cuda" : {"name" : "CUDA SDK","version" : "12.8.0"},"cuda_cccl" : {"name" : "CUDA C++ Core Compute Libraries","version" : "12.8.55"},"cuda_cudart" : {"name" : "CUDA Runtime (cudart)","version" : "12.8.57"},"cuda_cuobjdump" : {"name" : "cuobjdump","version" : "12.8.55"},"cuda_cupti" : {"name" : "CUPTI","version" : "12.8.57"},"cuda_cuxxfilt" : {"name" : "CUDA cu++ filt","version" : "12.8.55"},"cuda_demo_suite" : {"name" : "CUDA Demo Suite","version" : "12.8.55"},"cuda_gdb" : {"name" : "CUDA GDB","version" : "12.8.55"},"cuda_nsight" : {"name" : "Nsight Eclipse Plugins","version" : "12.8.55"},"cuda_nvcc" : {"name" : "CUDA NVCC","version" : "12.8.61"},"cuda_nvdisasm" : {"name" : "CUDA nvdisasm","version" : "12.8.55"},"cuda_nvml_dev" : {"name" : "CUDA NVML Headers","version" : "12.8.55"},"cuda_nvprof" : {"name" : "CUDA nvprof","version" : "12.8.57"},"cuda_nvprune" : {"name" : "CUDA nvprune","version" : "12.8.55"},"cuda_nvrtc" : {"name" : "CUDA NVRTC","version" : "12.8.61"},"cuda_nvtx" : {"name" : "CUDA NVTX","version" : "12.8.55"},"cuda_nvvp" : {"name" : "CUDA NVVP","version" : "12.8.57"},"cuda_opencl" : {"name" : "CUDA OpenCL","version" : "12.8.55"},"cuda_sanitizer_api" : {"name" : "CUDA Compute Sanitizer API","version" : "12.8.55"},"libcublas" : {"name" : "CUDA cuBLAS","version" : "12.8.3.14"},"libcufft" : {"name" : "CUDA cuFFT","version" : "11.3.3.41"},"libcufile" : {"name" : "GPUDirect Storage (cufile)","version" : "1.13.0.11"},"libcurand" : {"name" : "CUDA cuRAND","version" : "10.3.9.55"},"libcusolver" : {"name" : "CUDA cuSOLVER","version" : "11.7.2.55"},"libcusparse" : {"name" : "CUDA cuSPARSE","version" : "12.5.7.53"},"libnpp" : {"name" : "CUDA NPP","version" : "12.3.3.65"},"libnvfatbin" : {"name" : "Fatbin interaction library","version" : "12.8.55"},"libnvjitlink" : {"name" : "JIT Linker Library","version" : "12.8.61"},"libnvjpeg" : {"name" : "CUDA nvJPEG","version" : "12.3.5.57"},"nsight_compute" : {"name" : "Nsight Compute","version" : "2025.1.0.14"},"nsight_systems" : {"name" : "Nsight Systems","version" : "2024.6.2.225"},"nvidia_fs" : {"name" : "NVIDIA file-system","version" : "2.24.2"}
    }
    

    如果能够看到类似的输出,说明 CUDA 已经成功安装。

5. 设置环境变量

为了确保系统能够正确识别 CUDA 的路径,你需要设置以下环境变量。将以下内容添加到你的 ~/.bashrc 文件中:

export CUDA_HOME="/usr/local/cuda-12.8"
export CuDNN_HOME="/usr/local/cuda-12.8/include"
export PATH="/usr/local/cuda-12.8/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-12.8/lib64:$LD_LIBRARY_PATH"

添加完成后,运行以下命令使配置生效:

source ~/.bashrc

6. 注意事项

  • 不要安装 NVIDIA Linux 驱动程序:WSL 2 环境中的 CUDA 驱动程序是通过 Windows 主机上的 NVIDIA 驱动程序映射的,因此不要在 WSL 2 中安装任何 NVIDIA Linux 驱动程序。
  • 避免覆盖驱动程序:默认的 CUDA Toolkit 安装包可能会包含驱动程序,因此在安装时务必使用专门为 WSL-Ubuntu 设计的安装包,以避免覆盖 WSL 2 中的 NVIDIA 驱动程序。

7. 参考链接

  • NVIDIA CUDA on WSL 2 用户指南
  • CUDA Toolkit 下载页面
  • WSL 2 での CUDA 環境構築 (Qiita)

8. 总结

通过本文的步骤,你应该已经成功在 WSL Ubuntu 中安装了 CUDA Toolkit,并且可以开始开发和运行 CUDA 应用程序。WSL 2 的 CUDA 支持为开发者提供了一个便捷的环境,使得在 Windows 系统上进行 CUDA 开发变得更加容易。如果你在安装过程中遇到任何问题,可以参考 NVIDIA 的官方文档或社区论坛获取帮助。

相关文章:

WSL Ubuntu 安装 CUDA 教程

WSL Ubuntu 安装 CUDA 教程 1. 概述2. 准备工作3. 删除旧的 GPG 密钥4. 安装 CUDA Toolkit4.1 使用 WSL-Ubuntu 包安装(推荐) 5. 设置环境变量6. 注意事项7. 参考链接8. 总结 1. 概述 随着 WSL 2 的推出,Windows 用户现在可以在 Windows 子系…...

docker运行perplexica

序 本文主要研究一下如何用docker运行perplexica 步骤 git clone git clone https://github.com/ItzCrazyKns/Perplexica.gitapp.dockerfile FROM docker.1ms.run/node:20.18.0-alpineARG NEXT_PUBLIC_WS_URLws://127.0.0.1:3001 ARG NEXT_PUBLIC_API_URLhttp://127.0.0.1…...

15、Python面试题解析:列表推导式-条件推导与嵌套推导

1. 列表推导式简介 列表推导式(List Comprehension)是 Python 中一种简洁的创建列表的方式。它允许我们通过一行代码生成列表,通常比传统的 for 循环更简洁、更易读。 基本语法 [表达式 for 元素 in 可迭代对象]表达式:对元素的…...

uvm错误记录4

如下所示,奇怪的是penable莫名其妙的出X。可问题,我发送激励了。 仔细定位发现,39行用的是vif中的penable, 问题是都是赋值,却出现同时赋值多次,这是因为nonblocking和blocking同时触发导致的,因此&#xf…...

正则表达式(Regular expresssion)

正则表达式 匹配单次 . :匹配任意一个字符 [ ] :匹配[ ]里举例的任意一个字符 /d :匹配数字0-9 /D :匹配非数字 /s :匹配空白或tab建 /S :匹配非空白 /w :…...

React 中级教程

1. useState 与 setState 深入理解 import React, { useState } from react;const Counter = () => {const [count, setCount] = useState(0);const increment = () => {setCount(count + 1); // setState 会异步更新};return (<div><p>Count: {count}</…...

3dtiles——Cesium ion for Autodesk Revit Add-In插件

一、说明&#xff1a; Cesium已经支持3dtiles的模型格式转换&#xff1b; 可以从Cesium官方Aesset中上传gltf等格式文件转换为3dtiles&#xff1b; 也可以下载插件&#xff08;例如revit-cesium插件&#xff09;转换并自动上传到Cesium官方Aseet中。 Revit转3dtiles插件使用…...

高级 Conda 使用:环境导出、共享与优化

1. 引言 在 Conda 的基础包管理功能中&#xff0c;我们了解了如何安装、更新和卸载包。但对于开发者来说&#xff0c;如何更好地管理环境、导出环境配置、共享环境&#xff0c;以及如何优化 Conda 的使用效率&#xff0c;才是提高工作效率的关键。本篇博客将进一步深入 Conda …...

函数perror 和全局变量errno

#include <stdio.h> #include <errno.h> #include <fcntl.h>int main() {int fd open("nonexistent_file.txt", O_RDONLY);if (fd -1) {perror("Failed to open file");}return 0; }控制台有如下输出 Failed to open file: No such f…...

微信小程序的制作

制作微信小程序的过程大致可以分为几个步骤&#xff1a;从环境搭建、项目创建&#xff0c;到开发、调试和发布。下面我会为你简要介绍每个步骤。 1. 准备工作 在开始开发微信小程序之前&#xff0c;你需要确保你已经完成了以下几个步骤&#xff1a; 注册微信小程序账号&…...

QT 异步编程之多线程

一、概述 1、在进行桌面应用程序开发的时候&#xff0c;假设应用程序在某些情况下需要处理比较复制的逻辑&#xff0c;如果只有一个线程去处理&#xff0c;就会导致窗口卡顿&#xff0c;无法处理用户的相关操作。这种情况下就需要使用多线程&#xff0c;其中一个线程处理窗口事…...

人工智能之数学基础:线性子空间

本文重点 在前面的课程中,我们学习了线性空间,本文我们我们在此基础上学习线性子空间。在应用中,线性子空间的概念被广泛应用于信号处理、机器学习、图像处理等领域。 子空间的性质 子空间是线性空间的一部分,它需要满足下面的性质: 设V是数域F上的线性空间,W是V的一个…...

Proxmox 更新软件包数据库(TASK ERROR: command ‘apt-get update‘ failed: exit code 100)

1、连接自己报错的物理机Shell&#xff0c;编辑文件 vi /etc/apt/sources.list.d/pve-enterprise.list 2、注释文件的第一行在开头加上# 按I进入编辑模式后 开头添加# 然后shift&#xff1a; 输入wq或者wq&#xff01;进行保存 3、注释后执行两个命令apt-get update 和 apt…...

Python--常见库与函数

二、Python常见库与函数 2.1 OS库 常用功能&#xff1a;文件/目录操作、路径管理、环境变量。 import os # 路径操作 abs_path os.path.abspath("data.txt") exists os.path.exists(abs_path) # 目录操作 os.mkdir("logs") # 创建目录&#xff08;需处…...

算法——数学建模的十大常用算法

数学建模的十大常用算法在数学建模竞赛和实际问题解决中起着至关重要的作用。以下是这些算法的具体信息、应用场景以及部分算法的C语言代码示例&#xff08;由于篇幅限制&#xff0c;这里只给出部分算法的简要代码或思路&#xff0c;实际应用中可能需要根据具体问题进行调整和扩…...

JVM——垃圾回收算法

目录 垃圾回收算法 评价标准&#xff1a; 标记-清除算法&#xff1a; 复制算法&#xff1a; 标记-整理算法&#xff1a; 分代GC&#xff1a; arthas查看分代之后的内存情况&#xff1a; 垃圾回收算法 java是如何实现垃圾回收的呢&#xff1f;简单来说&#xff0c;垃圾回…...

游戏APP如何通过精准广告策略实现广告变现收益增长?

不同类型的游戏APP合作AdSet聚合广告平台&#xff0c;量身定制广告变现方案&#xff0c;以提升变现收益的表现。#app广告变现 1、智能选择广告形式 基于用户的行为习惯&#xff0c;推荐优化广告格式&#xff0c;包括插屏广告、激励视频广告和Banner广告等&#xff0c;最大化广…...

服务器安全——日志分析和扫描

如何通过访问日志查询被攻击 扫描攻击 攻击日志 GET /index?sindex/%5Cthink%5CModule/Action/Param/$%7Bphpinfo()%7D HTTP/1.1", host: "主机", referrer: "主机sindex/\think\Module/Action/Param/${phpinfo()}" 攻击日志文件 .error.log sql注…...

vue3读取webrtc-stream 视频流

一.首先下载webrtc-stream&#xff0c;方便自己本地搭建视频流服务 https://download.csdn.net/download/cyw8998/90373521 解压后&#xff0c;启动命令 webrtc-streamer.exe -H 127.0.0.1:8020 二.vue3代码如下 <template><h1>video</h1><video id&…...

周考考题(学习自用)

1.查询student表中name叫张某的信息 select * from student where name张某; 2.写出char和varchar类型的区别 1&#xff09;char存储固定长度的字符串&#xff0c;varchar存储可变长度的字符串&#xff08;在实际长度的字符串上加上一个字节用于存储字符串长度&#xff09;&a…...

ubuntu 22.04 安装vsftpd服务

先决条件&#xff0c;确保你已经配置好了存储库。 安装vsftpd 为了方便实验&#xff0c;我已经切换到了root用户。 rootlocal:~# apt-get install vsftpd修改配置 配置文件在 /etc/vsftpd.conf rootlocal:~# grep -vE ^#|^$ /etc/vsftpd.conf listenNO listen_ipv6YES anonymou…...

K-均值(K-means)聚类算法

K-均值&#xff08;K-means&#xff09;聚类算法是一种常用的无监督学习算法&#xff0c;用于将数据集分成 K 个簇&#xff08;clusters&#xff09;。该算法的基本思想是将数据点分为 K 个簇&#xff0c;使得每个数据点所属的簇内部的数据点之间的相似度最大化&#xff0c;而不…...

STM32F407通过FSMC扩展外部SRAM和NAND FLASH

1 扩展外部SRAM 1.1 地址情况 FSMC控制器的存储区分为4个区(Bank)&#xff0c;每个区256MB。其中&#xff0c;Bank1可以用于连接SRAM、NOR FLASH、PSRAM&#xff0c;还可以连接TFT LCD。Bank1的地址范围是0x60000000&#xff5e;0x6FFFFFFF。Bank1又分为4个子区&#xff0c;每…...

AndroidStudio查看Sqlite和SharedPreference

1.查看Sqlite 使用App Inspection&#xff0c;这是个好东西 打开方式&#xff1a;View → Tool Windows → App Inspection 界面如图&#xff1a; App inspection不但可以看Sqlite还可以抓包network和background task连抓包工具都省了。 非常好使 2.查看sharedPreference 使…...

Elasticsearch:15 年来致力于索引一切,找到重要内容

作者&#xff1a;来自 Elastic Shay Banon 及 Philipp Krenn Elasticsearch 刚刚 15 岁了&#xff01;回顾过去 15 年的索引和搜索&#xff0c;并展望未来 15 年的相关内容。 Elasticsearch 刚刚成立 15 周年。一切始于 2010 年 2 月的一篇公告博客文章&#xff08;带有标志性的…...

信呼OA办公系统sql注入漏洞分析

漏洞描述 信呼OA办公系统uploadAction存在SQL注入漏洞&#xff0c;攻击者可利用该漏洞获取数据库敏感信息。 环境搭建 源码下载地址&#xff1a;https://github.com/rainrocka/xinhu 下载后解压到本地网站根目录下&#xff0c;配置好数据库&#xff0c;然后安装即可 默认密…...

TDengine 客户端连接工具 taos-Cli

简介工具获取运行命令行参数 基础参数高级参数 数据导出/导入 数据导出数据导入 执行 SQL 脚本使用小技巧 TAB 键自动补全设置字符列显示宽度其它 错误代码表 简介 TDengine 命令行工具&#xff08;以下简称 TDengine CLI&#xff09;是用户操作 TDengine 实例并与之交互最简…...

机器学习算法 - 随机森林之决策树初探(1)

随机森林是基于集体智慧的一个机器学习算法&#xff0c;也是目前最好的机器学习算法之一。 随机森林实际是一堆决策树的组合&#xff08;正如其名&#xff0c;树多了就是森林了&#xff09;。在用于分类一个新变量时&#xff0c;相关的检测数据提交给构建好的每个分类树。每个…...

原生Three.js 和 Cesium.js 案例 。 智慧城市 数字孪生常用功能列表

对于大多数的开发者来言&#xff0c;看了很多文档可能遇见不到什么有用的&#xff0c;就算有用从文档上看&#xff0c;把代码复制到自己的本地大多数也是不能用的&#xff0c;非常浪费时间和学习成本&#xff0c; 尤其是three.js &#xff0c; cesium.js 这种难度较高&#xff…...

在 PyCharm 中接入deepseek的API的各种方法

在 PyCharm 中接入 DeepSeek 的 API&#xff0c;通常需要以下步骤&#xff1a; 1. 获取 DeepSeek API 密钥 首先&#xff0c;确保你已经在 DeepSeek 平台上注册并获取了 API 密钥&#xff08;API Key&#xff09;。如果没有&#xff0c;请访问 DeepSeek 的官方网站注册并申请 …...