深度学习的第一课,永远是配环境,而这涉及到了很多方面的零碎知识,对于新手来说是很头疼的。而CUDA,作为每个环境都绕不开的主题,在很多时候都会成为成功运行代码的阻碍。

这里简单介绍了一下一些需要注意的概念,和如何用conda去配cuda,希望能够让大家配环境的时候能够稍微轻松点。

Driver or CUDA?

NVIDIA显卡驱动程序

NVIDIA显卡驱动程序是软件组件,允许操作系统和应用程序与NVIDIA显卡进行通信。驱动程序提供了基本的图形和计算功能,使得GPU能够执行各种任务。主要功能:

  1. 图形渲染:管理图形渲染的任务,如游戏、视频播放、3D图形设计等。
  2. 计算加速:支持CUDA和其他并行计算平台(如OpenCL),使得GPU可以用于科学计算、机器学习等任务。
  3. 硬件管理:控制GPU的资源分配、性能调优和电源管理等功能。

安装方式:

  • 系统包管理器:在Linux上,通常通过包管理器(如apt、yum)安装。
  • NVIDIA官网:从NVIDIA官网下载驱动程序,并根据系统版本进行安装。

CUDA

CUDA是由NVIDIA开发的一种并行计算平台和编程模型,允许开发者使用GPU进行通用计算。这意味着开发者可以使用CUDA来编写代码,以便在GPU上执行计算密集型任务,而不仅仅是图形渲染。主要包括:

  1. CUDA Toolkit:提供了一系列开发工具和库,如cuBLAS(Basic Linear Algebra Subprograms)、cuFFT(Fast Fourier Transform)、cuDNN(Deep Neural Network)等。
  2. CUDA编译器(NVCC):用于编译CUDA代码,将其转换为可在GPU上运行的二进制代码。
  3. CUDA Driver API和Runtime API:提供编程接口,使得开发者可以方便地使用GPU进行计算。

安装方式:

  • 系统包管理器:在Linux上,可以通过包管理器安装CUDA Toolkit。
  • NVIDIA官网:从NVIDIA官网下载CUDA Toolkit,然后进行安装。
  • Conda:通过Conda环境安装CUDA Toolkit。

NVIDIA显卡驱动程序与CUDA的关系

  1. 依赖关系:CUDA依赖于NVIDIA显卡驱动程序。显卡驱动程序提供了底层的硬件访问和管理功能,而CUDA在此基础上提供高层次的编程接口和工具。
  2. 版本兼容性:CUDA Toolkit的版本需要与显卡驱动程序的版本兼容。通常,新的CUDA版本要求较新的显卡驱动程序版本。

工作流程:

  1. 驱动程序安装:首先需要安装NVIDIA显卡驱动程序,它提供了基础的硬件接口和图形功能。
  2. CUDA安装:在安装了驱动程序之后,可以安装CUDA Toolkit。CUDA利用驱动程序提供的接口与GPU进行通信,执行并行计算任务。

运行时环境:

  • 图形任务:显卡驱动程序直接处理。
  • 计算任务:显卡驱动程序提供底层支持,CUDA提供高层次API和工具,应用程序通过CUDA API与GPU通信。

注意事项:

  1. 版本兼容性:在安装驱动和CUDA时,确保版本兼容。NVIDIA通常会在CUDA Toolkit的发布说明中列出所需的驱动程序版本。
  2. 环境变量
    • CUDA安装路径需要添加到环境变量中,如 PATH 和 LD_LIBRARY_PATH,以便系统能够找到CUDA工具和库。
  3. 开发工具:CUDA Toolkit包含了开发CUDA应用的必要工具,如NVCC编译器和性能分析工具(如nvprof和Nsight)。
  4. 多版本CUDA:在某些情况下,可能需要在同一系统中安装多个版本的CUDA Toolkit。例如,不同的应用程序可能需要不同版本的CUDA支持。在这种情况下要小心管理不同版本的安装路径和环境变量。

总结

  • NVIDIA显卡驱动程序:提供对GPU的基础访问和管理功能,支持图形渲染和计算任务。
  • CUDA:提供高层次的并行计算平台和编程模型,依赖显卡驱动程序来与硬件进行通信。
  • 关系:CUDA工具包依赖于显卡驱动程序提供的底层硬件接口。二者需要版本匹配,以确保功能正常。
  • 环境管理:使用Conda等工具可以有效地管理不同版本的CUDA和相关依赖,避免版本冲突和环境污染。
  • 开发和运行:开发者可以使用CUDA API和工具(如NVCC、cuBLAS、cuDNN)来编写和优化高性能计算应用,并通过PyTorch、TensorFlow等高层次框架简化GPU计算任务。

使用conda安装cuda,环境隔离

以下说明,默认在linux上。

conda install cuda -c nvidia/label/cuda-12.1.0 这条命令使用 conda 包管理器从 nvidia 的指定标签(label/cuda-12.1.0)的频道中安装CUDA库。

这条命令会在虚拟环境中安装CUDA工具包的特定版本(在这个例子中是CUDA 12.1.0)。

CUDA工具包提供了以下内容:

  1. CUDA驱动程序:与NVIDIA显卡驱动程序配合使用,支持CUDA应用程序与硬件进行通信。
  2. CUDA库:如cuBLAS, cuDNN, cuFFT等,用于高效的数学操作和深度学习计算。
  3. CUDA编译器(NVCC):用于编译CUDA代码。
  4. CUDA工具:如nvprof、nsight等,用于性能分析和调试。

虚拟环境中的CUDA和系统环境CUDA的关系,还是需要知道的。

系统环境中的CUDA通常指的是通过系统包管理器或NVIDIA官方安装包直接安装在操作系统中的CUDA工具包。它位于系统的标准路径中,所有用户和应用程序都可以访问它。

系统环境CUDA和conda虚拟环境的CUDA有以下的相同点和不同点:

相同点

  • 功能:Conda安装的CUDA和系统环境中的CUDA提供了相同的核心功能和库。
  • 用途:两者都可以用于加速使用GPU的应用程序和计算任务。

不同点

  • 安装位置

    • 系统环境中的CUDA:通常安装在系统的标准目录,比如 /usr/local/cuda
    • Conda中的CUDA:安装在Conda环境的目录中,路径类似于 ~/anaconda3/envs/your_env_name/
  • 环境隔离

    • 系统环境中的CUDA:所有应用程序共享同一个CUDA工具包,容易出现版本冲突问题。
    • Conda中的CUDA:每个Conda环境可以有独立的CUDA版本和依赖库,这样可以避免版本冲突,实现环境隔离。

运行依赖CUDA的代码时,使用的CUDA版本取决于配置和环境:

  1. Conda环境激活时:如果激活了一个包含CUDA的Conda环境,这个环境中的CUDA库和工具会自动添加到环境变量(如 PATH 和 LD_LIBRARY_PATH)中。此时,运行依赖CUDA的代码会使用Conda环境中的CUDA。

  2. 系统环境中的CUDA:如果没有激活包含CUDA的Conda环境,或者在系统路径中优先配置了系统安装的CUDA工具包,那么代码可能使用系统环境中的CUDA。

如何确定实际使用的CUDA

  1. 检查环境变量:查看 PATH 和 LD_LIBRARY_PATH 环境变量,确认它们指向的是Conda环境中的CUDA还是系统中的CUDA。

  2. 使用 nvcc 命令:运行 nvcc --version 查看CUDA编译器的版本和路径。

  3. 或者在python中:
import torch
print(torch.version.cuda)

总结

  • conda install cuda -c nvidia/label/cuda-12.1.0 安装了CUDA 12.1.0工具包到指定的Conda环境中。
  • Conda中的CUDA 和 系统环境中的CUDA 提供相同的功能,但安装位置和环境隔离不同。
  • 环境变量和当前激活的环境决定了运行依赖CUDA的代码时使用的是Conda环境中的CUDA还是系统中的CUDA。
  • 使用pip 安装的时候,可以指定 --index-url https://download.pytorch.org/whl/cu[版本号] 从而下载支持指定cuda的torch软件包

Logo

欢迎来到由智源人工智能研究院发起的Triton中文社区,这里是一个汇聚了AI开发者、数据科学家、机器学习爱好者以及业界专家的活力平台。我们致力于成为业内领先的Triton技术交流与应用分享的殿堂,为推动人工智能技术的普及与深化应用贡献力量。

更多推荐