首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确定完整的CUDA版本+ subversion?

如何确定完整的CUDA版本+ subversion?
EN

Stack Overflow用户
提问于 2021-02-02 07:45:30
回答 2查看 536关注 0票数 1

Linux上的CUDA发行版曾经有一个名为version.txt的文件,该文件的内容如下:

代码语言:javascript
复制
CUDA Version 10.2.89

这是非常有用的。但是,从CUDA 11.1开始,此文件不再存在。

如何在Linux上从命令行检查/path/to/cuda/toolkit,确定我正在查看的确切版本?包括subversion吗?

EN

回答 2

Stack Overflow用户

发布于 2021-02-02 07:56:53

(根据@RobertCrovella的评论回答)

这将会起到作用:

代码语言:javascript
复制
/path/to/cuda/toolkit/bin/nvcc --version | egrep -o "V[0-9]+.[0-9]+.[0-9]+" | cut -c2-

当然,对于当前选择并配置为要使用的CUDA版本,只需获取路径上的nvcc

代码语言:javascript
复制
nvcc --version | egrep -o "V[0-9]+.[0-9]+.[0-9]+" | cut -c2-

例如:您将获得用于下载CUDA11.2的11.2.67,这是本周在NVIDIA网站上提供的。

完整的nvcc --version输出将是:

代码语言:javascript
复制
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2020 NVIDIA Corporation
Built on Mon_Nov_30_19:08:53_PST_2020
Cuda compilation tools, release 11.2, V11.2.67
Build cuda_11.2.r11.2/compiler.29373293_0
票数 2
EN

Stack Overflow用户

发布于 2021-02-02 19:16:36

下面的python代码在Windows和Linux上都能很好地工作,我已经用各种CUDA (大多数是8-11.2)测试了它。

它通过一系列猜测(检查环境变量、nvcc位置或默认安装路径)搜索cuda_path,然后从nvcc --version的输出中获取CUDA版本。没有使用@einpoklum的样式regexp,它只是假设在nvcc --version的输出中只有一个release字符串,但这可以简单地进行检查。

如果您有一个已知的路径要查询,您也可以只使用第一个函数。

将它添加为@einpoklum answer的一个额外部分,只是在python中做了同样的事情。

From TIGRE.

代码语言:javascript
复制
import glob
import os
from os.path import join as pjoin
import subprocess
import sys


def get_cuda_version(cuda_home):
    """Locate the CUDA version
    """
    version_file = os.path.join(cuda_home, "version.txt")
    try:
        if os.path.isfile(version_file):
            with open(version_file) as f:
                version_str = f.readline().replace('\n', '').replace('\r', '')
                return version_str.split(" ")[2][:4]
        else:
            version_str = subprocess.check_output([os.path.join(cuda_home,"bin","nvcc"),"--version"])
            version_str=str(version_str).replace('\n', '').replace('\r', '')
            idx=version_str.find("release")
            return version_str[idx+len("release "):idx+len("release ")+4]
    except:
        raise RuntimeError("Cannot read cuda version file") 
def locate_cuda():
    """Locate the CUDA environment on the system

    Returns a dict with keys 'home', 'include' and 'lib64'
    and values giving the absolute path to each directory.

    Starts by looking for the CUDA_HOME or CUDA_PATH env variable. If not found, everything
    is based on finding 'nvcc' in the PATH.
    """
    # Guess #1
    cuda_home = os.environ.get('CUDA_HOME') or os.environ.get('CUDA_PATH')
    if cuda_home is None:
        # Guess #2
        try:
            which = 'where' if IS_WINDOWS else 'which'
            nvcc = subprocess.check_output(
                [which, 'nvcc']).decode().rstrip('\r\n')
            cuda_home = os.path.dirname(os.path.dirname(nvcc))
        except subprocess.CalledProcessError:
            # Guess #3
            if IS_WINDOWS:
                cuda_homes = glob.glob(
                    'C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v*.*')
                if len(cuda_homes) == 0:
                    cuda_home = ''
                else:
                    cuda_home = cuda_homes[0]
            else:
                cuda_home = '/usr/local/cuda'
            if not os.path.exists(cuda_home):
                cuda_home = None
    version = get_cuda_version(cuda_home)
    cudaconfig = {'home': cuda_home,
                  'include': pjoin(cuda_home, 'include'),
                  'lib64': pjoin(cuda_home, pjoin('lib', 'x64') if IS_WINDOWS else 'lib64')}
    if not all([os.path.exists(v) for v in cudaconfig.values()]):
        raise EnvironmentError(
            'The CUDA  path could not be located in $PATH, $CUDA_HOME or $CUDA_PATH. '
            'Either add it to your path, or set $CUDA_HOME or $CUDA_PATH.')

    return cudaconfig, version


CUDA, CUDA_VERSION = locate_cuda()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66001729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档