像教女朋友一样教你用Cuda实现PyTorch算子

Ollama 可以在 Windows 上运行了 阅读详情

前段时间一直在做算子上的优化加速工作,在和其他同学的讨论中发现用Cuda编写算子存在一定的门槛。虽然知乎上有很多优秀的教学指南、PyTorch官方也给出了tutorial(具体地址会放在文章末尾),但是对于每个环节的介绍与踩坑点似乎没有详实的说明。

结合我当时入门踩坑的惨痛经验,一个简单明了的demo能够大大减小上手的时间成本。所以我在这里以数组求和(下称sum_single)、两数组相加(下称sum_double) 为例,详细介绍一下用Cuda实现PyTorch算子的完整框架,具体的代码详见CudaDemo

img

来源知乎:雅痞(已授权) 链接:https://zhuanlan.zhihu.com/p/595851188

框架结构

├── ops
│   ├── __init__.py
│   ├── ops_py
│   │   ├── __init__.py
│   │   └── sum.py
│   └── src
│       ├── reduce_sum
│       │   ├── sum.cpp
│       │   └── sum_cuda.cu
│       └── sum_two_arrays
│           ├── two_sum.cpp
│           └── two_sum_cuda.cu
├── README.md
├── setup.py
└── test_ops.py

demo结构如上,其中

  • ops/src/是Cuda/C++代码
  • setup.py是编译算子的配置文件
  • ops/ops_py/是用PyTorch包装的算子函数
  • test_ops.py 是调用算子的测试文件

Cuda/C++

对于一个算子实现,需要用到.cu(Cuda)编写核函数、.cpp(C++)编写包装函数并调用PYBIND11_MODULE对算子进行封装。

注意:Cuda文件和Cpp文件不能同名!!!否则编译不通过!!!

我们这里以src/sum_two_arrays/为例进行解释

// src/sum_two_arrays/two_sum_cuda.cu
#include <cstdio>

#define THREADS_PER_BLOCK 256
#define WARP_SIZE 32
#define DIVUP(m, n) ((m + n - 1) / n)


__global__ void two_sum_kernel(const float* a, const float* b, float * c, int n){
    int idx = blockIdx.x * blockDim.x + threadIdx.x;
    if (idx < n){
        c[idx] = a[idx] + b[idx];
    }
}


void two_sum_launcher(const float* a, const float* b, float* c, int n){
    dim3 blockSize(DIVUP(n, THREADS_PER_BLOCK));
    dim3 threadSize(THREADS_PER_BLOCK);
    two_sum_kernel<<<blockSize, threadSize>>>(a, b, c, n);
}

这里的关键是two_sum_kernel这一核函数实现数组相加功能。下面的two_sum_launcher函数负责分配线程块并调用核函数。

// src/sum_two_arrays/two_sum.cpp
#include <torch/extension.h>
#include <torch/serialize/tensor.h>

#define CHECK_CUDA(x) \
  TORCH_CHECK(x.type().is_cuda(), #x, " must be a CUDAtensor ")
#define CHECK_CONTIGUOUS(x) \
  TORCH_CHECK(x.is_contiguous(), #x, " must be contiguous ")
#define CHECK_INPUT(x) \
  CHECK_CUDA(x);       \
  CHECK_CONTIGUOUS(x)


void two_sum_launcher(const float* a, const float* b, float* c, int n);


void two_sum_gpu(at::Tensor a_tensor, at::Tensor b_tensor, at::Tensor c_tensor){
    CHECK_INPUT(a_tensor);
    CHECK_INPUT(b_tensor);
    CHECK_INPUT(c_tensor);

    const float* a = a_tensor.data_ptr<float>();
    const float* b = b_tensor.data_ptr<float>();
    float* c = c_tensor.data_ptr<float>();
    int n = a_tensor.size(0);
    two_sum_launcher(a, b, c, n);
}


PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {
  m.def("forward", &two_sum_gpu, "sum two arrays (CUDA)");
}

在C++文件中实现算子的封装,文件开头的宏定义函数是为了保证传入的向量在cuda上(CHECK_CUDA)、传入的向量中元素地址连续(CHECK_CONTIGUOUS)。two_sum_launcher是对cuda文件中的声明。

two_sum_gpu是与Python的接口,传入的参数是PyTorch中的Tensor。在这一部分需要对Tensor做CHECK检验(可选),并通过.data_ptr得到Tensor变量的指针。对于Tensor在C++中的使用可查阅[2]。

最后PYBIND11_MODULE的作用是对整个算子进行封装,能够通过Python调用C++函数[3]。对于自定义的其他算子,只用改动m.def()中的三个参数

  • "forward":算子的方法名,假如算子的整个模块命名为sum_double,则在Python中通过sum_double.forward调用该算子
  • &two_sum_gpu:进行绑定的函数,这里根据自己实现的不同函数进行更改
  • "sum two arrays (CUDA)":算子注释,在Python端调用help(sum_double.forward) 时会出现

可能有人会疑惑为什么要把算子和模块分开。假如整个sum_double有许多不同的功能,我就可以在一个模块中绑定多个算子,具体只用在PYBIND11_MODULE中写入多个m.def(),再通过sum_double.xxx调用不同的算子

setup.py编译配置

在整个项目的根目录新建setup.py文件配置编译信息,利用setuptools对算子打包

from setuptools import find_packages, setup
from torch.utils.cpp_extension import BuildExtension, CUDAExtension

setup(
    name='CudaDemo',
    packages=find_packages(),
    version='0.1.0',
    author='xxx',
    ext_modules=[
        CUDAExtension(
            'sum_single', # operator name
            ['./ops/src/reduce_sum/sum.cpp',
             './ops/src/reduce_sum/sum_cuda.cu',]
        ),
        CUDAExtension(
            'sum_double',
            ['./ops/src/sum_two_arrays/two_sum.cpp',
             './ops/src/sum_two_arrays/two_sum_cuda.cu',]
        ),
    ],
    cmdclass={
        'build_ext': BuildExtension
    }
)

文件中需要进行改动的有

  • name:包名
  • version:包版本号
  • author:作者名称
  • ext_modules:编译C/C++扩展,list类型,每个元素为一个模块的相关信息(这里的模块在讲Cuda/C++这一块的末尾有提到,一个模块可以含有多个具体的算子)

CUDAExtension

在ext_modules中采用CUDAExtension指明Cuda/C++的文件路径 ,其中第一个参数为对应模块的名字,第二个参数为包含所有文件路径的列表。

这里的模块名和Cuda/C++中m.def()定义的算子名共同决定了调用算子的方式。 例如两数组相加的模块名是sum_double、算子方法名是forward, 所以在Python中调用该算子的方式为sum_double.forward()。

值得一提的是packages的值为list[str],表示本地需要打包的package。这里find_packages()是找出本地所有的package。当然我们打包只用考虑ops/src/中的文件,所以packages=['ops/src']也能正常编译,不过为了方便还是采用find_packages()。

PyTorch包装

为了让自定义算子能够正常正向传播、反向传播,我们需要继承torch.autograd.Function进行算子包装。我们这里以sum_double为例进行介绍

#ops/ops_py/sum.py
import torch
from torch.autograd import Function
import sum_double

class SumDouble(Function):

    @staticmethod
    def forward(ctx, array1, array2):
        """sum_double function forward.
        Args:
            array1 (torch.Tensor): [n,]
            array2 (torch.Tensor): [n,]
        
        Returns:
            ans (torch.Tensor): [n,]
        """
        array1 = array1.float()
        array2 = array2.float()
        ans = array1.new_zeros(array1.shape)
        sum_double.forward(array1.contiguous(), array2.contiguous(), ans)

        # ctx.mark_non_differentiable(ans) # if the function is no need for backpropogation

        return ans

    @staticmethod
    def backward(ctx, g_out):
        # return None, None   # if the function is no need for backpropogation

        g_in1 = g_out.clone()
        g_in2 = g_out.clone()
        return g_in1, g_in2


sum_double_op = SumDouble.apply

文件开头import sum_double就是导入的setup.py中定义的模块名。

自定义的torch.autograd.Function类型要实现forward、backward函数,并声明为静态成员函数。

forward

前向传播的前半部分就是正常传入Tensor进入接口,如果传入向量在之前的代码里是索引出来的很可能非连续,所以建议在传入算子的时候使其连续。

如果算子不需要考虑反向传播,可以用ctx.mark_non_differentiable(ans) 将函数的输出标记不需要微分

backward

backward的输入对应forward的输出,输出对应forward的输入。例如这里backward的输入g_out对应forward输出ans,backward的输出g_in1, g_in2对应内联代码片forward输入array1, array2。

如果算子不需要考虑反向传播,则直接return None, None。否则就按照对应输入变量的梯度进行计算。

值得注意的是,如果反向传播需要用到forward的信息,可以用ctx进行记录存取。例如对一个数组求和,则反向传播的梯度为原数组长度的向量。就可以在forward中用ctx.shape=array.shape[0]记录输入数组长度,并在backward中通过n=ctx.shape进行读取。

如果存取的是Tensor则建议使用save_for_backward(x, y, z, ...)存储向量,并用x, y, z, ...=ctx.saved_tensors取向量,而不是直接用ctx。

To prevent incorrect gradients and memory leaks, and enable the application of saved tensor hooks.注:save_for_backward()只能存向量,标量用ctx直接存取。

最后用sum_double_op = SumDouble.apply获取最终的函数形式。

init.py

为了在外部调用包装好的PyTorch函数,通过ops/ops_py/__init__.py声明

from .sum import sum_single_op, sum_double_op
__all__ = ['sum_single_op', 'sum_double_op']
ops/__init__.py
from .ops_py import *

Build & Test

提前安装好PyTorch环境,并在demo的根目录下pip install -e .

通过python test_ops.py测试结果,没问题的情况应输出:

Average time cost of sum_single is 2.8257 ms
Average time cost of sum_double is 0.1128 ms

如果无法编译可能是没有将nvcc加入环境变量,ls /usr/local/看看是否有cuda文件夹。例如我这里是cuda-11.6文件夹,则进入~/.bashrc在文件末尾加入

export PATH=$PATH:/usr/local/cuda-11.6/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.6/lib64 

如何学习AI大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高

那么我作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,希望可以帮助到更多学习大模型的人!至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

全套AGI大模型学习大纲+路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

img

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

DeepSeek本地部署详细指南 通过上述步骤,你可以在本地成功部署DeepSeek模型,并通过Ollama或Open Web UI与模型进行交互。本地部署不仅能够保护数据隐私,还能根据需求灵活调整模型参数,满足不同场景下的使用需求。如果你在部署过程中遇到任何问题,可以在评论区留言,我们将一起解决。希望这篇教程能帮助你顺利部署DeepSeek模型,开启高效开发的新旅程! 阅读详情

相关推荐

PyTorch转ONNX遇到算子不支持?3种实战解决方案+TensorRT适配技巧

本文针对PyTorch模型导出ONNX时常见的算子不支持问题,提供了从诊断到解决的完整实战指南。首先讲解如何精准定位错误根源,随后详细介绍了三种核心解决方案:注册缺失的符号映射、实现自定义算子,以及为TensorRT开发插件的终极落地方案。文章还分享了构建稳健部署流水线的工程化实践,帮助开发者系统性地解决模型部署中的算子兼容性挑战。

fern8的博客 843

一文彻底整明白,基于Ollama工具的LLM大语言模型Web可视化对话机器人部署指南

在上一篇博文中,我们在本地部署了**Llama 3 8B**参数大模型,并用 Python 写了一个控制台对话客户端,基本能愉快的与 Llama 大模型对话聊天了。但控制台总归太技术化,体验不是很友好,我们希望能有个类似 ChatGPT 那样的 Web 聊天对话界面,本博文就安排起来……

老牛啊 1万+

深度学习环境配置:CUDA、cuDNN与PyTorch版本对齐全攻略

在深度学习开发中,GPU加速是提升模型训练与推理效率的核心技术。其原理依赖于NVIDIA的CUDA并行计算架构,通过将计算任务分配到数千个GPU核心上并行处理,实现相比CPU的数十倍乃至数百倍加速。这项技术的核心价值在于,它使得训练复杂的深度神经网络从理论可行变为实际高效,极大地推动了计算机视觉、自然语言处理等领域的发展。在实际应用中,无论是学术研究还是工业部署,一个稳定且高效的GPU开发环境都是项目成功的基石。然而,环境配置常因版本不匹配导致失败,例如出现“CUDA error: no kernel im

weixin_30516243的博客 694

使用ollama在本地部署llama3-8b大模型

使用ollama在本地部署llama3-8b大模型

weixin_39945822的博客 1万+

Windows下MMCV与PyTorch/CUDA版本冲突全解析:从报错到精准安装

本文深度解析了在Windows系统下安装MMCV时,因与PyTorch、CUDA版本不匹配导致的常见报错问题。文章提供了从查询官方版本对应表、检查现有环境,到一步步手把手安装PyTorch 2.1.0 + CUDA 11.8 + MMCV 2.1.0黄金组合的完整实战指南,并附有高频报错的深度排查与解决方案,帮助用户彻底解决版本冲突难题。

weixin_28836989的博客 497

解决CUDA版本不匹配:PyTorch、CUDA、cuDNN与驱动兼容性全攻略

GPU加速计算是深度学习的核心,其性能依赖于CUDA并行计算架构。CUDA作为NVIDIA GPU的通用计算平台,通过编译器与运行时库将代码转换为GPU可执行指令。cuDNN则是在此基础上针对卷积、池化等深度学习操作的高度优化库,能显著提升模型训练与推理速度。在工程实践中,PyTorch、TensorFlow等框架通过调用CUDA和cuDNN的底层接口实现GPU加速。然而,版本兼容性是部署中的常见挑战,尤其是PyTorch与CUDA版本不匹配导致的“No kernel image”报错。本文从实战出发,系统

weixin_33834910的博客 329

像教女朋友一样教你用 Cuda 实现 PyTorch 算子

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达前言CUDA(Compute Unified Device Architecture)是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。开发人员可以使用C语言来为CUDA架构编写程序,所编写出的程序可以在支持CUDA的处理器上以超高性能运行。编辑 | 自动驾驶之心 作者丨雅痞@知乎链接丨http...

小白学视觉 587

如何为GeForce 50系显卡编译专属PyTorch CUDA 12.8 wheel包?

本文详细指导了如何在Windows 11系统上,为GeForce 50系显卡编译适配CUDA 12.8的专属PyTorch wheel包。文章从环境准备、核心编译参数配置(特别是针对Blackwell架构的TORCH_CUDA_ARCH_LIST设置)入手,逐步讲解编译过程,并提供了性能调优、疑难排错以及安装验证的完整方案,帮助开发者充分利用新显卡性能。

weixin_29090677的博客 260

【深度学习】像教女朋友一样教你用 Cuda 实现 PyTorch 算子

前言CUDA(Compute Unified Device Architecture)是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。开发人员可以使用C语言来为CUDA架构编写程序,所编写出的程序可以在支持CUDA的处理器上以超高性能运行。编辑 | 自动驾驶之心 作者丨雅痞@知乎链接丨https://zhuanlan.zhihu.com/p/595851188前...

fengdu78的博客 314

LLM的MCP协议:初识MCP,搭建第一个MCP Server

MCP(Model Context Protocol),是一个开发的协议,标准化了应用程序如何为大模型提供上下文。MCP提供了一个标准的为LLM提供数据、工具的方式,使用MCP会更容易的构建Agent或者是基于LLM的复杂工作流。

Criss@陈磊 2万+

Linux系统下Materials Studio 2020安装避坑指南:从依赖包到许可证配置全流程

本文提供了一份在Linux系统上安装Materials Studio 2020的深度避坑指南。详细解析了从系统依赖包检查、安装流程、许可证配置到Gateway服务部署的全过程,并分享了与Slurm作业调度系统集成的实战经验,旨在帮助用户高效、稳定地完成部署。

weixin_29313547的博客 387

深入浅出PyTorch(算子篇)

解读PyTorch的内部机制。

cedi9117的博客 8174

SAP License:SAP会计凭证抬头的字段状态控制

FI模块的同事一般都知道在FI中有个字段状态变式,可以控制在凭证输入时哪些字段是必输、哪些可选哪些隐藏,但这只对凭证行项目中有效,你是否想过对于凭证抬头的字段是哪控制呢? 在中国,会计附件上都要带一个附件张数字段,但SAP的默认配置中没有这一字段,并非SAP没有设置此字段,而是我们没有配置这一字段。如果需要在凭证输入时放出分支号(BRNCH)、附件页数(NUMPG)等字段,在个人参数文件中加入参数CSF,参数值AR,即可。如下图: 实际上,这是对凭证国家的一个设置,在SAP中,配置了AR这个国家..

SAP权限管控|SAP用户权限管理|SAP权限合规检查|SAP全日志管理 2226

PyTorch-CUDA镜像支持ONNX导出便于模型部署

本文介绍如何利用PyTorch-CUDA镜像实现高效模型训练,并通过ONNX导出实现跨平台模型部署。涵盖环境配置、ONNX导出技巧、常见问题解决及最佳实践,打通从研发到生产的AI工程化链路。

weixin_36464343的博客 713

qt实现程序密钥注册功能,MD5加密+AES加密,并实现一台电脑系统一个密钥

qt实现了一个给自己软件加密的功能。 原理是: 需要被注册的软件第一次运行的时候,在系统的注册表里面注册一个键值,如下: 这个值作为生成密钥的用户识别号,然后生成密钥文件key.db,把这个key.db文件放到软件执行目录下,即可完成软件的注册并正常使用软件。 软件第一次打开的界面及密钥生成工具软件界面如下: 将密钥生成工具软件生成的key.db放到软件执行目录下之后,软件即可正常使用,如下图: 代码使用了MD5加密 外加 AES加密, 解密和加密的核心代码如下: QSt.

weixin_43935474的博客 4130

研究生研一学习机器学习ML、深度学习DL的规划

研究生学习机器学习DL、深度学习DL的规划 保上研之后也没有很好规划自己的学习路线,看到b站上的一位清华博士讲述他本科也是机械跨考计算机的学习路线,所以记录下来,从现在开始按照规划来一点一点地做好。 掌握python(推荐一周) 1.1 面向对象编程 廖雪峰python网站: https://www.liaoxuefeng.com 1.2 数据分析Numpy numpy 100题: https://www.yanxishe.com/columnDetail/24784 1.3数据分析pandas pan

没有最好,只有更好 3100

如何用AI快速解决PyTorch的NMS算子缺失问题

总结下来,遇到PyTorch算子缺失问题时,首先要冷静分析错误信息,然后根据项目需求选择合适的解决方案。平台的一键部署功能也很方便,测试NMS算法时,我可以直接把代码部署到云端运行,不用操心环境配置问题。NMS是目标检测中常用的后处理步骤,用于过滤掉重叠的预测框。当我把错误信息输入到平台的AI对话区,它不仅能准确识别问题原因,还能直接生成可用的修复代码,省去了大量查文档的时间。这个错误直接导致我的模型无法正常运行,经过一番折腾终于解决了问题,记录下这个排查过程,希望能帮到遇到同样问题的朋友。

IndigoNight21的博客 906

基于ROS2的无人机野生动物巡查系统设计

自主巡检系统是嵌入式人工智能与机器人技术融合的关键应用方向,其核心在于多源感知融合、实时路径规划与端侧智能识别的协同实现。原理上依赖SLAM定位构建环境地图,结合栅格化建模与混合路径算法(如蚁群+BFS)达成全覆盖遍历;技术价值体现在资源受限平台下的确定性响应与时空对齐能力,支撑高鲁棒性野外作业。典型应用场景包括生态监测、禁飞区巡检及小尺度智能安防。本文围绕ROS2 Humble中间件架构、Livox激光雷达与MaixCAM视觉协同、YOLO11n INT8模型端侧部署等关键技术展开,突出嵌入式AI与实时控

weixin_30598047的博客 650

AI 本地环境配置:一文梳理 Nvidia驱动/CUDA/CUDNN/PyTorch/Paddle 版本兼容&安装问题(持续更新)

各种版本兼容,让很多朋友在学习 AI 的过程中,倒在了`配置环境`的路上。本文洋洋洒洒数千字,把`AI 环境配置`的各种问题捋了一遍

u010522887的专栏 1889

分数间隔均衡器的基本原理及应用(使用Matlab)

通过对接收信号进行加权求和,分数间隔均衡器可以抵消信号在传输过程中受到的频率响应失真。Matlab提供了丰富的工具和函数,可以方便地实现分数间隔均衡器,并进行性能评估。分数间隔均衡器(Fractional Interval Equalizer)是一种数字信号处理技术,用于均衡带通信道中的信号失真。分数间隔均衡器的基本原理是通过对接收信号进行加权求和,以抵消信号在传输过程中受到的频率响应失真。分数间隔均衡器在通信系统中具有广泛的应用。最后,我们通过比较均衡后的信号和发送数据的阈值来进行解调,并计算误码率。

2301_79325657的博客 686

飞行机械臂设计

其后对飞行机械臂系统的机 理模型和基于 ADAMS 的物理模型进行了控制系统的搭建,对于机理模 型,设计了三个输入通道,分别是俯仰力矩,翻滚力矩与偏航力矩,控 制量为翻滚角,俯仰角,偏航角。四旋翼无人机自身具有独特的优势,在无人机上增加机械臂,整个 机体系统相当于一架空中行动自如的空中机器人,可以适应更多的应用场合,能够实现空中抓取,运输载荷,巡航监视等任务。的函数模块如图 4-8 所示,可见输入为 U1,U2,U3,U4,分别对应总力矩,俯仰力矩,翻滚力矩,偏航力矩,控制 量为俯仰角,翻滚角,偏航角。

coldmood77的博客 2919

【CUDA Toolkit与NVIDIA驱动】Pytorch GPU可用但nvcc不可用:解析conda环境下的CUDA依赖管理

本文深入解析了在conda环境中PyTorch可调用GPU但nvcc命令不可用的常见问题。核心在于conda为PyTorch提供的是精简的CUDA运行时库,而非完整的CUDA Toolkit开发工具包。文章提供了详细的诊断步骤,并推荐通过conda直接安装匹配版本的cuda-toolkit来优雅地补全NVCC编译器,实现环境内CUDA开发工具的完整可用。

t4y5u6i7o的博客 419

Python 复现AlexNet框架代码

【代码】Python 复现AlexNet框架代码。

Quintin 2422

Debug | Windows10 Anaconda环境下CUDA与PyTorch版本不匹配问题排查指南

本文针对Windows10 Anaconda环境下PyTorch报错“No CUDA runtime is found”的问题,提供了一套系统排查指南。文章详细分析了PyTorch、CUDA与cuDNN版本不匹配的核心原因,并通过流程图和分步实操,指导读者从验证PyTorch GPU版本、检查系统CUDA与conda cudatoolkit,到安装关键组件cuDNN,最终完成正确GPU版PyTorch的安装与验证,彻底解决环境配置难题。

ipfs8storage的博客 508

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

上一篇: 大模型入门实战:通过 HuggingFace 调用 Llama3
下一篇: 这本AI入门书不懂技术也能读,从大模型入门到精通,大模型初学者必看!
冻感糕人~
博客等级 码龄3年 8926粉丝 2393原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值