Pytorch GPU环境搭建-博客导航

news2024/12/25 9:24:57

这里写目录标题

  • 安装
    • 安装VS(CUDA需要VS)
    • 安装CUDA
    • 安装CUDNN
    • 创建Pytorch GPU虚拟环境
  • 测试
    • 疑难杂症解决链接
    • 搭建VGG分类网络并用CUDA训练
    • 使用CUDA加速推理分类网络
    • C#使用ONNXruntime-gpu推理

安装

安装VS(CUDA需要VS)

2017,2019,2022都可

安装CUDA

Cuda和cuDNN安装教程(超级详细)
查看安装的CUDA
CUDA版本不同:nvidia-smi和nvcc -V

安装CUDNN

Cuda和cuDNN安装教程(超级详细)

创建Pytorch GPU虚拟环境

1.创建虚拟环境
建议创建虚拟环境,你也可以公用,但是不提倡,因为有些场景用到的库版本不一样,以及全部放在一起的话,环境就会非常大,python本身就是一个体积小巧的脚本语言

名字随便取,我这里叫cls_py38_gpu

conda create -n cls_py38_gpu python=3.8

2.安装Pytorch
注意选择CUDA,然后版本这里选择使用11.8
在这里插入图片描述
conda安装

conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia

注意,如果你没有科学上网方法,那么建议用pip或者pip3安装,这两个exe在你的虚拟环境中在这里插入图片描述

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

无论是conda还是pip下载有可能会失败,重新执行命令即可

测试

疑难杂症解决链接

调用CUDA时报错
Could not locate zlibwapi.dll. Please make sure it is in your library path
解决问题:Could not locate zlibwapi.dll. Please make sure it is in your library path!
导出ONNX报错
Exporting AdaptiveAvgPool2d to ONNX with ATen fallback produces an error #17377
Unsupported: ONNX export of operator adaptive_avg_pool2d
训练loss梯度不下降或下降幅度不明显
SGD & Adam优化器
Why doesn’t the accuracy when training VGG-16 change much?
ONNX-gpu推理
How do you run a ONNX model on a GPU?

搭建VGG分类网络并用CUDA训练

完整代码见文末Github仓库


if __name__ == '__main__':
    if torch.cuda.is_available():
        device = torch.device("cuda:0")
        print("Running on the GPU")
        num_gpu=torch.cuda.device_count()
        print("there are {} gpu on you computer".format(num_gpu))
    else:
        device = torch.device("cpu")
        print("Running on the CPU")

    model = VGG(image_channels,num_classes).to(device)
    optimizer = optim.Adam(model.parameters(), lr=lr, weight_decay=weight_decay)

    criterion =CrossEntropyLoss()

    test_list, train_list = get_files(dataset_folder, test_data_ratio)

    train_loader = DataLoader(MyDataset(train_list, transform=None, test=False), batch_size=batch_size, shuffle=True,
                              collate_fn=collate_fn)
    test_loader = DataLoader(MyDataset(test_list, transform=None, test=True), batch_size=batch_size, shuffle=True,
                             collate_fn=collate_fn)
    print("训练集数量{}", train_list.__len__())
    print("测试集数量{}", test_list.__len__())
    accuracies = []
    test_loss = []
    train_loss = []
    current_accuracy = 0
    model.train()
    for epoch in range(epochs):
        start_time = datetime.now()
        loss_epoch = 0
        for index, (input, target) in enumerate(train_loader):

            input = (input.to(device))
            target = (from_numpy(array(target)).long()).to(device)
            output = model(input)
            loss = criterion(output, target)
            optimizer.zero_grad()
            loss.backward()
            optimizer.step()
            loss_epoch += loss.item()

        end_time = datetime.now()
        print("epoch:{},耗时: {}秒".format(epoch,end_time - start_time))
        if (epoch + 1) % train_step_interval == 0:
            print("Epoch: {} \t Loss: {:.6f} ".format(epoch + 1, loss_epoch))

使用CUDA加速推理分类网络

完整代码见文末Github仓库

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
if __name__ == '__main__':
    with open('config.json') as f:
        param_dict = json.load(f)
    class_dict = dict()
    for i in range(len(param_dict["class_labels"])):
        class_dict[i] = param_dict["class_labels"][i]

    print("test class dict{}", class_dict)
    num_classes = len(param_dict["class_labels"])
    image_channels = param_dict["image_channels"]
    model = VGG(image_channels, num_classes)
    utils.load_model("checkpoints/mnist.pth", model)
    model = model.to(device)
    print(model)

    test_list = utils.get_allfiles(
        r"I:\test_images_full")

    test_loader = DataLoader(MyDataset(test_list, transform=None, test=True), batch_size=1, shuffle=True,
                             collate_fn=utils.collate_fn)
    correct_num = 0
    step = 0
    total_num = len(test_list)
    with torch.no_grad():
        for item in test_loader:
            image, label = item
            image = image.to(device)
            label = label
            output = model(image)
            # print(class_dict.__getitem__(numpy.argmax(output.numpy())))
            # label是list类型,需要转成tensor,output输出n分类的得分,需要求最大下标
            res = torch.eq(torch.from_numpy(numpy.array(label)).long().to(device), torch.argmax(output))
            step = step + 1
            if (res):
                correct_num = correct_num + 1
            if (step % 100 == 0):
                print("{}/{},current accuracy{:.4f}".format(step, total_num, correct_num / step))
    print("[{}/{}],correct rate:{}".format(correct_num, len(test_list), correct_num / len(test_list)))

C#使用ONNXruntime-gpu推理

var useCuda = true;
if (useCuda)
{
    SessionOptions opts = SessionOptions.MakeSessionOptionWithCudaProvider();
    var session = new InferenceSession(modelPath, opts);
    return session;
}

else
{
    SessionOptions opts = new();
    var session = new InferenceSession(modelPath, opts);
    return session;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1965307.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

山东润馨教育专家团队多次举办各种扶贫及公益讲座

一、山东润馨教育专家鲁书婉老师举办了以“发掘孩子的天赋潜能”为主题的公益讲座 在这个充满温情与希望的春日,3月16日,山东润馨教育专家团队带着满满的爱心与智慧,踏入了德州学院附属第一实验小学联合滨河社区,成功举办了一场以…

如何恢复硬盘里删除的数据?硬盘数据恢复真的可靠吗?2024最新解答!

在日常的计算机使用中,我们时常会不小心删除硬盘中的重要数据,这时候,数据恢复就显得尤为重要。本文将介绍几种恢复硬盘里删除数据的方法,并探讨硬盘数据恢复的可靠性,提供2024年的最新解答。 一、什么是电脑硬盘&…

【Linux】进程创建进程终止进程等待

目录 一、进程创建1.1 写时拷贝1.2 frok的常规用法1.3 fork调用失败的原因 二、进程终止2.1 进程退出码2.2 进程退出方式2.2.1 exit函数的使用2.2.2 _exit函数的使用2.2.3 exit函数与_exit函数的区别 2.3 进程信号 三、进程等待3.1 进程等待的必要性3.2 进程等待的方式3.2.1 wa…

从零开始的MicroPython(一) 软件安装及环境搭建

文章目录 MicroPython简介下载安装 ESP32(NodeMCU-32S)简介引脚注意事项 CH340下载安装 Thonny IDE下载 Python简介下载环境配置 MicroPython 简介 ​ MicroPython 是 Python 3 编程语言的精简高效的实现 其中包括 Python 标准库的一小部分,并且是经过优化&#x…

达梦数据库系列—40.执行计划

目录 优化器 执行计划 操作符 执行过程 优化器 查询优化器通过分析可用的执行方式和查询所涉及的对象统计信息来生成最优的执行计划。此外,如果存在 HINT 优化提示,优化器还需要考虑优化提示的因素。 查询优化器的处理过程包括: 1.优化…

手摸手教你撕碎西门子S7通讯协议14--开发自己的通讯库读数据

1、S7通讯回顾 - (1)建立TCP连接 Socket.Connect- - (2)发送访问请求 COTP- - (3)交换通信信息 Setup Communication- - (4)执行相关操作 读、写、PLC启停、时间…

【Android】DrawerLayout+NavigationView实现侧滑菜单页面

【Android】DrawerLayoutNavigationView实现侧滑菜单页面 在 Android 开发中,侧滑菜单是一个非常常见的用户界面模式,它能够在屏幕的一侧显示一个导航菜单,允许用户通过滑动手势或点击按钮来访问不同的应用功能。本文将介绍如何使用 DrawerL…

网页UI设计工具全攻略:九大精选

如果担心不知道如何进行网站 UI 设计、设计网站和编辑网页技术程序,很多人会选择快速方便的 Wix 建设。然而,如果你想建立一个最合适的网站,使用一个功能强大、资源丰富的网站 UI 设计工具仍然是您的最佳选择。网站设计中的 UI 设计不同于一般…

你是否知道Vue的data两种不同定义区别呢?

在做vue项目的时候,虽然vue3出来了一段时间了,vue2已经官方宣布不再维护了,然而我们有些旧项目原来是用的vue2的,那么用了那么久的vue2,不知道你是否有注意到,vue2我们往往会在根文件定义了一个对象形式的d…

类似redmine的项目管理系统有哪些?10款软件测评

国内外主流的10款类似redmine项目管理系统对比:PingCode、Worktile、TAPD、OpenProj、禅道(ZenTao)、Teambition、JIRA、Asana、Basecamp、Wrike。 在项目管理领域,选择一个既能满足需求又易于操作的工具是每个团队都面临的挑战。…

利用SOLIDWORKS CAD 2024新功能 提高团队工作效率

随着科技的不断发展,CAD(计算机辅助设计)软件在各行业中的应用越来越广泛,尤其在机械、汽车、航空航天、电子设备等领域。SOLIDWORKS作为一款功能强大的CAD软件,一直在不断更新和优化,以适应不断变化的市场…

【区块链】控制台的配置、操作及常用命令②

常用命令-账户管理 常用命令-区块信息 在控制台中编译部署智能合约 启动节点 在fisco目录下 bash nodes/127.0.0.1/start_all.sh启动控制台 cd ~/fisco/console && bash start.sh部署合约 deploy HelloWorldtransaction hash: 交易的哈希值 contract address&#x…

plugin ‘ROS2‘: loading...error CoppeliaSim和ROS2插件问题

问题 装了24年最新版本ROS2 Jazzy但是仿真软件打开出bug,怎么办? 等支持的出来,完全可以。但是,如果需要用,那调整一下即可。 CoppeliaSim(V-Rep)和ROS2的使用说明_coppeliasim编译-CSDN博客…

【网络】HTTP协议——应用层协议、URL、HTTP协议格式、HTTP的方法、HTTP的状态码、HTTP常见Header

文章目录 Linux网络1. 应用层2. HTTP协议2.1 URL2.2 urlencode和urdecode2.3 HTTP协议格式2.4 HTTP的方法2.5 HTTP的状态码2.6 HTTP常见Header Linux网络 1. 应用层 应用层是 OSI 七层模型或 TCP/IP 四层模型中的最高层,它直接为用户的应用程序提供服务。 应用层的…

MySQL数据库-SQL编程

一、触发器 1.触发器简介 触发器(trigger)是一个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, u…

【C++标准库】模拟实现string类

模拟实现string类 一.命名空间与类成员变量二.构造函数1.无参(默认)构造2.有参构造3.兼容无参和有参构造4.拷贝构造1.传统写法2.现代写法 三.析构函数四.string类对象的容量操作1.size2.capacity3.clear4.empty5.reserve6.resize 五.string类对象的访问及…

傅里叶变换与FFT应用

一、傅里叶变换 1.1 变换 我们先给例子,假设在直角坐标系上有A(2,1),B(1,2);数和图之间存在的关系,称作变换;在图上我们想找对角线C,通过计算我们就知道C(3,3);我们知道,在坐标系上有单位向量,…

Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 之 [ 选择并训练模型 ] [ 模型微调 ] | 3/3(含分析过程)

Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 之 [ 选择并训练模型 ] [ 模型微调 ] | 3/3(含分析过程) 目录 Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 之 [ 选择并训练模型 ] [ 模型微调 ] | 3/3(含分析…

Vue使用flex将图片并排居中且左对齐

先看效果&#xff1a; 在看代码 <template><div class"outer"><div class"inner"><div classeach_image v-for"(item,index) in image_list" :key"index"><img class"image_class" src"./…