【conda】使用 conda 安装的 cuda-toolkit 时,安装的版本与指定版本不一致

news/2024/12/23 16:25:27 标签: conda, 深度学习

conda】使用 conda 安装的 cuda-toolkit 时,安装的版本与指定版本不一致

  • 1 问题描述
  • 2 channel 介绍
    • 2.1 conda-forge
    • 2.2 nvidia
      • 2.2.1 cuda-toolkit
  • 3 原因
  • 4 解决方法

1 问题描述

参考博客: Link

与参考博客的问题相似,我本机是 cuda 11.8,使用 conda 安装 cuda-toolkit 12.1,但最终 nvcc -V 显示为 12.6

执行 conda list 后发现安装 cuda 相关的包来自不同的 channel:

  • nvidia
  • nvidia/label/cuda-12.1.0
  • conda-forge

在这里插入图片描述

2 channel 介绍

condaforge_21">2.1 conda-forge

参考文档: Link

conda-forge 是一个社区项目,为各种软件提供 conda 包,所有 conda-forge 包都可以在这里找到: Link

2.2 nvidia

nvidia 的所有包都可以在这里找到: Link

2.2.1 cuda-toolkit

安装 cuda-toolkit 后会改变虚拟环境中的 cuda 版本,所有版本 cuda-toolkit 的 conda channel: Link

如果要指定版本安装,应该选择相应的 channel,否则会安装最新的版本。

在这里插入图片描述

3 原因

参考文档: Link

我使用 .yml 文件来创建环境并安装各个包

conda env create -f /path/to/environment.yml

下面是我初始的 .yml 文件内容:

channels:
  - pytorch
  - nvidia
  - nvidia/label/cuda-12.1.0
  - conda-forge
  - defaults
dependencies:
  - python=3.10
  - faiss-gpu=1.8.0
  - cuda-toolkit=12.1
  - pytorch=2.1.2
  - pytorch-cuda=12.1 
  - torchvision=0.16.2

默认情况下,conda 会优先选择来自高优先级 channel 的包,所以由于优先级的问题,导致 cuda-toolkit 中各个包安装的来源不同,版本不一致。

4 解决方法

  1. 删除原环境
conda remove -n xxx --all
  1. 修改 .yml 文件,将 nvidia/label/cuda-12.1.0 的优先级提前
channels:
  - pytorch
  - nvidia/label/cuda-12.1.0
  - nvidia
  - conda-forge
  - defaults
dependencies:
  - python=3.10
  - faiss-gpu=1.8.0
  - cuda-toolkit=12.1
  - pytorch=2.1.2
  - pytorch-cuda=12.1 
  - torchvision=0.16.2
  1. 创建环境并安装
conda env create -f environment.yml

如果过程中出错造成中断,可以通过 update 继续安装

conda activate xxx
conda env update -f environment.yml

安装完成后,就是 cuda 12.1

在这里插入图片描述

在这里插入图片描述

其中 cuda-version 这个包的 channel 为 conda-forge 的原因是在 condanvidia/label/cuda-12.1.0 这个 channel 中找不到 cuda-version 12.1.0,所以在低优先级的 channel 检索并安装。

在这里插入图片描述


http://www.niftyadmin.cn/n/5796752.html

相关文章

数位dp-acwing(数字游戏)

题目:数字游戏 1082. 数字游戏 - AcWing题库 分析: 前缀和思想: dp(m) - dp(n-1) 用树的角度分析。 比最高位小的, 左分支讨论,等于最高位的进入右分支,(同时进入右分支有条件,就是当前位最…

【C语言】动态内存管理:详解malloc和free函数

前言 在C语言编程中,动态内存分配是一个非常重要的概念。与静态内存分配不同,动态内存分配允许程序在运行时根据需要分配和释放内存,从而更加灵活地管理内存资源。特别是在一些数据结构的引用中经常需要使用,下面我们就详细讲解一…

LeetCode 583. 两个字符串的删除操作 java题解

https://leetcode.cn/problems/delete-operation-for-two-strings/ 用最长公共子序列的做法。先求出他两的最长公共子序列,这部分是要保留的。字符串中除了这部分的字符,其他字符都需要删除。 class Solution {public int minDistance(String word1, St…

linux----文件访问(c语言)

linux文件访问相关函数 打开文件函数 - open 函数原型:int open(const char *pathname, int flags, mode_t mode);参数说明: pathname:这是要打开的文件的路径名,可以是绝对路径或者相对路径。例如,"/home/user/…

机器学习(二)-简单线性回归

文章目录 1. 简单线性回归理论2. python通过简单线性回归预测房价2.1 预测数据2.2导入标准库2.3 导入数据2.4 划分数据集2.5 导入线性回归模块2.6 对测试集进行预测2.7 计算均方误差 J2.8 计算参数 w0、w12.9 可视化训练集拟合结果2.10 可视化测试集拟合结果2.11 保存模型2.12 …

tslib(触摸屏输入设备的轻量级库)的学习、编译及测试记录

目录 tslib的简介tslib的源码和make及make install后得到的文件下载tslib的主要功能tslib的工作原理tslib的核心组成部分tslib的框架和核心函数分析tslib的框架tslib的核心函数ts_setup()的分析(对如何获取设备名和数据处理流程的分析)函数ts_setup()自身的主要代码ts_setup()对…

材料性质预测、分子生成、分类等研究方向的大语言模型构建与应用

流程 数据准备 收集和预处理大规模材料相关数据集。格式化数据以适应模型输入。 模型预训练 基于Transformer架构进行大规模无监督预训练。任务:掩码语言模型(MLM)或自回归生成任务。 任务微调 针对特定任务(性质预测、分子生成、…

Docker Compose 安装 Harbor

我使用的系统是rocky Linux 9 1. 准备环境 确保你的系统已经安装了以下工具: DockerDocker ComposeOpenSSL(用于生成证书)#如果不需要通过https连接的可以不设置 1.1 安装 Docker 如果尚未安装 Docker,可以参考以下命令安装&…