- 博客(26)
- 收藏
- 关注
原创 torch自定义算子路线
把你自己的一个操作,正式注册进 PyTorch 的算子系统(dispatcher)里,让它像torch.addtorch.sum那样被框架认识。一旦注册成功,这个操作就不再只是一个“普通 Python 函数”或“普通 pybind11 暴露出来的 C++ 函数”,而是会进入 PyTorch 的算子分发体系,进而有机会和、autograd、vmap、autocast 等子系统协同工作。官方也明确说了:如果你只是直接拿 Tensor 的 data pointer 调自己的 C/C++/CUDA 代码,而。
2026-04-02 08:57:17
453
原创 Python 自定义算子和 C++/CUDA 自定义算子
你已经有一个 Python 函数,想把它当成真正的 torch 算子;你想把某段 Python 逻辑当成的黑盒;你想快速验证算子注册、FakeTensor、autograd 这一整套链路。你要自己写高性能 CPU/CUDA 内核;你希望算子底层真正跑在 C++/CUDA;你要把一个新算子正式接入 PyTorch dispatcher。
2026-04-01 17:00:39
386
原创 Torch 自定义算子
算子名:例如。schema(签名):例如“输入几个参数、各自是什么类型、返回什么、有没有原地修改输入”。kernel(实现):真正执行计算的代码,可能有 CPU kernel、CUDA kernel、Fake/meta kernel、autograd 规则等。PyTorch 的 dispatcher 会根据设备类型和上下文选择合适的实现。“我这里有一个新算子,名字叫这个。“它的输入输出长这样。“CPU 上怎么跑,CUDA 上怎么跑。/ FakeTensor 遇到它该怎么推断形状。
2026-04-01 14:22:02
422
原创 深入理解 torch.compile()
TorchDynamo 负责把 Python 里的张量运算抓成图,AOT Autograd 负责把训练里的 backward 也尽量纳入图,TorchInductor 负责把这些图变成高性能后端代码;graph break 决定图能不能连成大块,guard 决定旧代码还能不能复用,recompilation 则是输入变化后的代价。第一次执行:抓图、建图、分解/降级、代码生成、缓存。后续执行:检查 guards,命中缓存就直接跑,不命中就重编译。
2026-03-26 17:29:12
505
原创 Torch 的算子、kernel 与 调度
算子是“操作的定义”,不是“某一段具体实现代码”。torch.addtorch.reluaten::add你自己注册的这个操作叫什么输入输出是什么语义是什么它在 PyTorch 体系里是如何被识别和注册的官方自定义 operator 文档里明确说,PyTorch 本身提供了大量对 Tensor 起作用的 operators,比如torch.addtorch.sum等;如果你要引入新的 custom operation,就需要通过或 C++ 的API 把它注册进这个 operator 体系。
2026-03-26 10:17:57
395
原创 Torch 的编译与调度
编译器本来想把你的代码连成一整张图,但中间某一步看不懂,只好断开。官方文档明确说,默认设置下,会在遇到无法追踪的代码时做 graph break,然后把不支持的那部分交回常规Python 执行。官方也建议:如果你是库开发者,或者你在测试一段代码是否真正兼容,最好用,这样如果整段函数不能被抓成单一图,就直接报错,便于尽早发现问题。def f(x):print("hello") # 普通 Python 行为z = y + 1return z这里print这种普通 Python 行为就可能让编译图断开。
2026-03-25 17:02:16
397
原创 一篇看懂 Torch 的编译与调度
时,PyTorch 要决定:这一步到底该谁来执行?它会借助 TorchDynamo 抓图,再交给 backend,默认是 TorchInductor。某个算子时“实际运行哪段代码”,而且它要处理 CPU/CUDA、autograd、autocast、vmap 等一层层叠加的问题。也就是把你写的那段 Python / PyTorch 代码,尽量整理成一张更规整的“计算图”,再交给后端去优化,让它跑得更快。很多人刚接触 PyTorch,会觉得它只是一个“写神经网络”的库。定义为 PyTorch 的内部组件,
2026-03-25 14:59:59
185
原创 PyTorch的 Eager与Compiled模式
维度Eager Mode执行方式解释执行,遇操作即运行先捕获图,编译优化,再运行速度基准速度通常更快(融合算子,减少开销)调试非常方便(printpdb较复杂(优化后的代码不易直接调试)内存占用基准占用通常更低(算子融合减少中间变量)启动时间无预热时间有一次性编译预热时间适用场景开发调试、动态性强的小模型生产部署、训练大模型、固定结构的推理。
2026-03-24 16:09:43
424
原创 pytest 相关使用
向 PyTorch 测试框架表明当前测试是在(AMD 的 GPU 计算平台)环境下运行。:测试脚本会根据此标志跳过那些不适用于 ROCm 的测试(例如某些仅支持 CUDA 的测试),或者启用 ROCm 特定的测试用例。:示测试运行器(通常是)在遇到测试失败时,而不是立即停止。:默认情况下,某些测试脚本可能在第一个失败后就退出(类似pytest -x的行为),以快速发现问题。设置此变量后会覆盖该行为,允许整个测试套件完整运行,收集所有失败项。
2026-03-03 10:05:19
138
原创 PyTorch源码总体框架与模块底层介绍
统一抽象:所有张量操作通过同一套 C++ API 表达动态调度:运行时根据张量属性自动选择执行路径多后端支持:同一算子可无缝运行于 CPU / GPU 等不同硬件高性能实现:核心算子依托成熟的硬件加速库实现最优性能ATen 并不关心你是用 Python 还是 C++,也不关心你是否在做自动求导;它只负责:定义“张量应该如何计算”,并在运行时把这件事交给最合适的硬件去完成。
2026-01-15 17:41:57
659
原创 Pytorch,CUDA,ROCM 和 CPU/GPU 的介绍
从表面上看,深度学习似乎只是“运行一段 Python 代码”。但在工程层面,它本质上是一个,涉及:海量矩阵与张量运算多阶段前向与反向传播高并发并行计算大规模内存读写任何单一软硬件组件,都无法独立完成这一任务。因此,深度学习天然要求一套。
2026-01-14 16:42:43
676
原创 mysql 安装
打开MySQL官方下载页:https://dev.mysql.com/downloads/installer/电脑 win + R 打开运行窗口,同时按住 Ctrl+ Shift + Enter,以管理员身份打开cmd。(可选)设置MySQL服务名(服务名是之后开启MySQL服务时使用的名称)右键“此电脑”> 属性 > 高级系统设置,打开下图界面,点击“环境变量”。点击右上角“新建”,将之前我们复制的MySQL的bin目录路径粘贴进去。点击 Execute,等待安装完毕(如下图所示)。
2024-10-13 19:46:47
238
1
原创 UbunTu cuda版本切换,软连接
这里,cuda-11.7和cuda-11.8就是我们安装的两个cuda版本了,而cuda是一个软链接,它指向我们指定的cuda版本(之前是cuda-11.7,现在想要指向11.8)当我们想使用cuda-11.8版本时,只需要删除上面的软链接,然后重新建立指向cuda-8.0版本的软链接即可(注意名称还是cuda,因为要与bashrc文件里设置的保持一致)可以看到现在笔者的cuda是指向的cuda11.7,再用nvcc --version 命令看下我们当前使用的是哪个版本.” 保存并退出。
2024-03-01 18:52:43
2116
原创 ubuntu MP4文件无法播放问题
输入 sudo apt install ubuntu-restricted-extras。按住 ctrl+alt+T 打开终端。来解决ubuntu许多受限问题。
2023-11-23 19:07:41
965
原创 deepfake detection 基于指纹、基于图像和基于频谱的检测方法
深度伪造检测(Deepfake Detection)是指检测和识别深度伪造技术所生成的虚假图像、音频、视频或文本。深度伪造技术使用深度学习和人工智能方法来生成虚假内容,这可能包括合成面部图像、模仿声音、修改视频或生成虚假文本等。深度伪造检测是一个不断发展的领域,研究人员和工程师不断提出新的方法和技术,以提高检测的准确性和鲁棒性。随着深度伪造技术的不断演进,深度伪造检测方法也在不断发展,以适应新的挑战。深度伪造工具可能会在生成的内容中留下某些独特的噪音、伪造工具的标志或其他可识别的特征。
2023-11-10 13:01:51
1393
1
原创 机器学习:L1 约束
它在回归问题中用于特征选择,有助于识别对目标变量有重要影响的特征,同时将不相关的特征的权重收缩为零。L1正则化的效果是使一些权重趋向于零,从而使模型更加稀疏,即某些特征对模型的预测贡献较小,这有助于特征选择和减小模型的复杂度。L1约束(L1 constraint)通常是指在机器学习和优化领域中,对模型的权重(参数)添加L1正则化项,L1正则化项也称为L1惩罚(L1 penalty)或L1范数(L1-norm),它的形式通常为。其中,λ是正则化参数,用于控制正则化的。以控制模型的复杂度和减小过拟合的风险。
2023-11-10 11:06:09
643
1
原创 机器学习:卷积,反卷积,池化,反池化
最大池化是对局部的值取最大;平均池化是对局部的值取平均;随机池化是根据概率对局部的值进行采样,采样结果便是池化结果。具体来说,若卷积核是C,输入是X,卷积得到的特征图就是Y,那么CX=Y。反卷积操作就是,Y左乘X转置,c T y = x。反卷积是特殊的卷积,可以将输入还原。分为最大池化,平均池化,随机池化。内积后得到的是特征图。池化的作用就是降维。
2023-11-09 20:48:33
800
1
原创 机器学习,可迁移攻击,通用扰动攻击和对抗样本攻击
通用扰动攻击是一种更通用的攻击方法,攻击者寻找一种扰动,可以应用于大量输入数据样本,而不是特定的单个样本。攻击者寻找一种扰动,将原始输入数据样本修改为对抗样本,以使模型在对抗样本上产生错误的输出。对抗样本攻击通常专注于欺骗模型的个别数据样本,目标是在特定输入上实现攻击成功。通用扰动攻击(Universal Perturbation Attack)和对抗样本攻击(Adversarial Example Attack)是两种不同的攻击方法,它们有一些区别和相似之处。
2023-11-07 16:02:08
570
原创 CV黒盒攻击
在黑盒攻击中,攻击者通常通过试探和分析来推断模型的行为,并生成特定的输入以欺骗或破坏目标模型。second:基于迁移的攻击:攻击者利用已有知识、数据或模型,将这些信息迁移到目标模型上,以推断目标模型的行为并进行攻击。通过迁移学习、模型迁移或特征迁移等技术,攻击者可以对目标模型进行攻击,即使对目标模型的内部信息一无所知。first::基于查询的攻击:攻击者通过向目标模型发送特定的查询样本,并观察模型的输出,通过分析不同查询样本和输出之间的关联关系,推断模型的性质和脆弱点,从而生成有效的攻击样本。
2023-11-07 15:33:04
299
原创 torch.argmax(outputs, dim=1)与torch.argmax(outputs, dim=0)
torch.argmax(outputs, dim=1)
2023-11-04 16:41:12
1991
1
原创 KNN (k近邻算法)代码实现
计算测试点与所有训练点的距离。# 返回k个点中出现最频繁的标签。# 获取距离最近的k个点的索引。# 利用matplotlib绘制图像。# 初始化KNN分类器,指定K值。# 将数据集分为训练集和测试集。# 获取k个点的标签。# 加载Iris数据集。# 在测试集上进行预测。
2023-11-04 10:26:01
218
1
原创 BCEloss
当y为0的时候,公式前半部分为0,y' 需要尽可能为0才能使后半部分数值更小;当y为1时,后半部分为0,y'需要尽可能为1才能使前半部分的值更小,这样就达到了让y'尽量靠近y的预期效果。BCELoss:Binary Cross Entropy Loss,二值交叉熵损失,适用于0/1二分类。这要求输出必须在0-1之间,所以为了让网络的输出确保在0-1之间,一般都会加一个Sigmoid。y是真实标签,y'是预测值,
2023-11-03 16:48:34
756
原创 RunTimeError:element 0 of tensors does not require grad and does not have a grad_fn
这个错误源于Pytorch对Tensor进行 backward() 自动求导时,该Tensor的requires_grad为False,requires_grad参数指定是否记录对Tensor的操作以便计算梯度。在创建Tensor时该参数默认为False,需要手动设置如下。也可以通过loss.requires_grad_(True)设置。
2023-11-01 21:24:22
3869
1
原创 pycharm想要显示多个运行结果
在该文件运行结束后,在下方右键点击pin tab,相当于该运行结果被固定了。如果想要文件的运行结果不被下一个运行结果覆盖,可以使用pin tab。
2023-10-30 16:37:30
2611
2
原创 pycharm控制台隐藏了,找回方法
单击”View“菜单->“Tool Windows”->"Python Console"即可重新调出。当时不小心将pycharm控制台右键hide了,就是下面这个。
2023-10-30 16:02:15
6941
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅