PyTorch 矩阵乘法的方法总结 & 问题解答

部署运行你感兴趣的模型镜像

在机器学习和深度学习中时,矩阵运算是最常见、有效提高计算效率的方法。因为特征和权重都以向量储存,矩阵运算就显得尤为重要,诸如梯度下降、反向传播、矩阵因子分解等重要的机器学习方法,都需要基于矩阵运算。

在深度学习中,神经网络将权重储存在矩阵当中,基于线性代数的运算在 GPU上,可以对矩阵进行简单迅捷的计算处理。

 

小规模的矩阵运算,可以用 for 循环来快速运算。但是一旦遇到巨大的数据量,循环语句就会拖慢运算速度,这时候我们常常使用矩阵乘法,它可以极大提高运算的效率。

 

常见矩阵、向量、标量相乘方法

  • torch(mm) 二维矩阵乘法

torch.mm(mat1,ma2,out=None), 其中 mat1(n*m), mat2(m*d), 输出 out 的维度是(n*d)。

注:计算两个二维矩阵的矩阵乘法,而且不支持广播。

 

  • torch.bmm() 三维带 Batch 矩阵乘法

torch.bmm(bmat1,bmat2,out=None),其中 bmat1(b*n*m), bmat2(B*m*d), 输出 out 的维度是 (B*n*d)。

注:该函数的两个输入必须是三维矩阵且第一维相同(表示Batch维度),不支持广播。

 

  • torch.matmul() 混合矩阵乘法 

torch.matmul(input,other,out=None),该方法较为复杂建议参考文档,两个张量的矩阵乘积,计算结果取决于张量的维度,支持广播。

 

  • torch.mul() 矩阵逐元素乘法 

torch.mul(mat1,other,out=None),其中 other 乘数可以是标量也可以是任意维度的矩阵,只要满足最终相乘即可,支持广播。

 

  • torch.mv() 矩阵向量乘法

torch.mv(mat, vec, out=None) ,对矩阵 mat 和向量 vec 进行相乘。如果mat 是一个 n×m 张量,vec 是一个 m 元的一维张量,将会输出一个 n 元的一维张量,不支持广播。

 

  • torch.dot() 张量点乘法

torch.dot(tensor1, tensor2) ,计算两个张量的点乘,两个张量都为 1-D 向量,不支持广播。

 

论坛热门问题

 Q:不用 for 循环,如何进行批数据向量相乘 ?

input shape:N x M x VectorSize

weight shape:M x VectorSize x VectorSize

目标 output shape:N x M x VectorSize

N 表示批尺寸,M 表示向量数量,VectorSize 则代表向量的大小。

如下图所示:

 解决思路:

N, M, V=2, 3, 5a = torch.randn(N, M, V)b = torch.randn(M, V, V)a_expand = a.unsqueeze(-2)b_expand = b.expand(N, -1, -1, -1)c = torch.matmul(a_expand, b_expand).squeeze(-2)

原帖地址:

https://discuss.pytorch.org/t/batch-matrix-vector-multiplication-without-for-loop/112841

 

 Q:计算矩阵向量乘以批向量输入,出现 RuntimeError 报错 

给定:

# (batch x inp)v = torch.randn(5, 15)# (inp x output)M = torch.randn(15, 20)

计算:

# (batch x output)out = torch.Tensor(5, 20)for i, batch_v in enumerate(v):    out[i] = (batch_v * M).t()

但是 (i) 乘法对于两个维度相同的输入,都会出现:

RuntimeError: inconsistent tensor size at /home/enrique/code/vendor/pytorch/torch/lib/TH/generic/THTensorMath.c:623

为什么会出现这个报错?有没有能避免行向量循环的方法?

 

解决思路:

* 表示 elementwise 乘法,如果你用的是 Python3,可以使用 @ 算子可以用作矩阵-向量乘法和矩阵-矩阵乘法。

也可以使用 batch_v.mm(M),因为批向量矩阵(batched vector matrix)即矩阵-矩阵乘法。

此外还可以借助 bmm、 baddbmm 等方法消除 Python 中的循环操作。

 

原贴地址:

https://discuss.pytorch.org/t/matrix-vector-multiply-handling-batched-data/203

 

 Q:不使用循环语句的前提下,如何计算矩阵向量相乘?

求 2x2 的矩阵乘以 3 个大小为 2 的向量,如果不使用循环,该如何实现?

备注:

1、使用循环语句时代码如下:

A=torch.tensor([[1.,2.],[3.,4.]])b=torch.tensor([[3.,4.], [5.,6], [7.,8.]])res = []for i in range(b.shape[0]):    res.append(torch.matmul(A, b[i]))

2、经尝试 torch.matmul (A.repeat ((2,1,1)) ,b) 行不通。

 解决思路:

可以通过 a.matmul (b.t ()) 实现。

原帖地址:

https://discuss.pytorch.org/t/vectorize-matrix-vector-multiplication/88051

本公众号将持续更新 PyTorch 最新资讯和开发技巧,欢迎关注!

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

<think> 首先,用户的问题是关于找到适配 Python 3.10、PyTorch 1.11.0 + CUDA 11.3 (cu113) 的 cumm 版本。cumm 可能指的是一个库或框架,但我需要回想一下 cumm 是什么。根据上下文,cumm 可能是一个拼写错误或特定术语。在 PyTorch 生态系统中,cumm 可能指的是 "cumulative" 或类似的东西,但更可能是一个打字错误。或许是 "cumm" 应该是 "CuPy" 或 "CuPy-like",但标准术语是 "CuPy"。用户提到了 "cumm",但在引用中,我看到 "cumm" 可能是一个错误;或许是 "cuml" 或 "cumm",但我不确定。 再看用户的引用:引用[1]到[5]都讨论 PyTorch 安装,但没有直接提到 "cumm"。可能是用户误写了,应该是 "cuml",即 RAPIDS CuML,或者 "cumm" 是另一个库。在 PyTorch 上下文中,"cumm" 可能指的是 CUDA Memory Manager 或类似的东西,但更常见的是库如 CuPy 或 RAPIDS。 用户说:"我想查找适配 Python 3.10、PyTorch 1.11.0 + CUDA 11.3(cu113)版本的 cumm"。这里的 "cumm" 可能是一个特定项目的名称。我应该检查是否是拼写错误。或许是 "cuml",即 RAPIDS 的机器学习库。RAPIDS CuML 兼容 CUDA 和 Python。 在引用中,用户提供了关于 PyTorch 安装的信息,但 cumm 没有出现。所以,我需要基于一般知识回答。 cumm 可能指的是 "cumm",一个特定的库。我快速搜索记忆:在 PyTorch 生态中,有一个库叫 "cumm",是用于高效卷操作的,可能是基于 CUDA 的。cumm 是一个 CUDA 矩阵乘法库或类似的东西。但我认为用户可能指的是 "CuPy" 或 "cumm" 作为自定义库。 或许是 "cumm" 是 "cumulative",但更合理的是,用户可能打错了,应该是 "cuDNN" 或 "CUDA Toolkit",但用户指定了 "cumm"。 另一个想法:在引用[2]中,有 "torch1.11.0+cu113",用户提到了 PyTorch 1.11.0 with cu113, 所以 cumm 可能是一个依赖库。 我应该假设 cumm 是一个库名。cumm 可能指的是 "CUDA Memory Manager" 或类似,但标准库是 CuPy 或 RAPIDS。 或许用户指的是 "cuml",RAPIDS 的库。RAPIDS 要求特定版本的 CUDA 和 Python。 为了回答,我需要提供 cumm 的适配版本。既然 cumm 不是标准库,我应建议用户检查官方文档或 GitHub。 但用户引用了站内内容,所以我应该基于引用回答。 引用[1]: 安装 PyTorch 1.11.0 with cu113。 引用[2]: 提到了 torch1.11.0+cu113。 引用[3]: PyTorch1.10 with cuda11.3。 引用[4] and [5]: PyTorch 1.12 with cuda11.3。 用户想找 cumm 版本适配 Python 3.10, PyTorch 1.11.0, CUDA 11.3。 cumm 可能是一个拼写错误,应该是 "CuPy" 或 "cuml"。 在上下文中,或许是 "cumm" 指的是一个特定的包。回忆中,有一个库叫 cumm 用于稀疏卷或类似任务,由 open-mmlab 或其他开发。 例如,spconv 或 cumm 是一个库用于高效卷。 我找到了:有一个 GitHub 仓库 "cumm" 或类似。搜索记忆:有一个项目叫 "spconv" 或 "cumm" 用于 PyTorch CUDA 扩展。 具体来说,用户可能指的是 "cumm" from https://github.com/traveller59/spconv or something similar. spconv has a dependency. 更准确地说,有一个库叫 "cumm" 是用于 CUDA 矩阵乘法的优化,但我不确定。 为了安全起见,我应该建议用户检查 cumm 的官方文档或 PyPI 页面。 但用户要求基于引用回答,所以引用中没有直接提到 cumm。 所以,我需要 infer from the context. 或许 cumm 是用户打错了,应该是 "cudnn" or "cuda toolkit", but user said "cumm". 另一个想法: in some contexts, "cumm" might mean "CUDA memory management", but that's not a separate library. I think I should address it as is. 我的回答必须使用中文,结构清晰,并生成相关问题。 首先,确认用户需求:适配 Python 3.10, PyTorch 1.11.0 + CUDA 11.3 的 cumm 版本。 cumm 可能是一个库名。假设它是 "cuml" 或 "CuPy",但用户写了 "cumm"。 在引用中,没有 cumm,所以 I have to provide general advice. 或许在 PyTorch 生态中,cumm 指的是特定扩展。 我应该搜索或 recall that for PyTorch, extensions like torchvision or torchaudio are mentioned, but not cumm. 在引用[5],有 "cudatoolkit=11.3",但 cumm not mentioned. 所以,我的回答应该指导用户如何找到兼容版本。 步骤: 1. 确认 cumm 是什么:首先,询问或假设 cumm 是一个库,如 CuPy 或 RAPIDS cuml。 但用户指定了 "cumm",所以我会使用它。 2. 建议检查 cumm 的官方文档或 GitHub 仓库,查看支持的 Python 和 CUDA 版本。 3. 基于 PyTorch 版本,推断可能兼容的 cumm 版本。 4. 由于 CUDA 11.3 是共同的,Python 3.10 是较新的,需要确保 cumm 支持。 例如,对于 RAPIDS cuml,版本如 22.04 或更新可能支持 Python 3.10 和 CUDA 11.x。 但 cumm 可能不是 cuml。 或许用户指的是 "cumm" from a specific project. 回忆:有一个库叫 "cumm" 是用于 3D 稀疏卷的,由 open-mmlab 维护或类似。 例如,spconv 库依赖于 CUDA 和 PyTorch. spconv 的 GitHub 页面可能有信息。 但我不确定。 对于回答,我应该提供一般指导。 既然用户提供了引用,我可以引用那些来支持 PyTorch 安装,但 cumm 是额外的。 我的回答:由于引用中没有提到 cumm,我可以说基于 PyTorch 1.11.0 + cu113 的安装,cumm 版本应兼容相同的 CUDA 版本。 然后,建议用户查看 cumm 的文档。 生成相关问题。 回答结构: - 先理解问题:用户想找 cumm 版本适配指定环境。 - 然后,提供建议:如何确定兼容版本。 - 最后,生成相关问题。 使用中文。 系统指令:所有数学表达式用 $...$ 或 $$...$$,但这里可能没有数学。 LaTeX 语法正确。 引用段落末尾加标识,如 [^1]。 在回答中引用用户提供的引用。 例如,引用[1] 说安装了 PyTorch 1.11.0 with cu113,所以 cumm 应兼容。 但 cumm 没有在引用中提到。 或许用户误写了,cum 应该是 cudnn 或别的。 另一个想法:在引用[2],有 "torch1.11.0+cu113",用户可能想 cumm 类似。 我认为我应该直接回答。 最终回答草稿: 首先,cumm 可能是一个特定的库,如用于 CUDA 加速的机器学习库。基于您提供的引用,PyTorch 1.11.0 与 CUDA 11.3 (cu113) 兼容,如引用[1]和[2]所示[^1][^2]。对于 cumm 版本,您需要查看其官方文档或 GitHub 仓库以确认兼容性。 通常,库如 cumm 会指定支持的 PyTorch 和 CUDA 版本。例如,如果 cumm 是 RAPIDS cuML 或类似,版本如 v22.04 可能支持 Python 3.10 和 CUDA 11.x。 但为了准确,建议: 1. 访问 cumm 的 PyPI 页面或 GitHub 仓库。 2. 检查版本历史或安装说明。 3. 确保与 Python 3.10 和 PyTorch 1.11.0 兼容。 由于 CUDA 11.3 是稳定的,许多库支持它。 生成相关问题。 相关问题: 1. 如何安装 cumm 与 PyTorch 1.11.0 和 CUDA 11.3? 2. cumm 的功能和用途是什么? 3. 对于 Python 3.10,有哪些兼容的机器学习库? 类似这样。 </think>基于您的查询和提供的引用内容,我将逐步解答如何查找适配 Python 3.10、PyTorch 1.11.0 + CUDA 11.3(cu113)的 cumm 版本。cumm 可能指的是一个特定库(如 CUDA 加速的机器学习库或自定义扩展),但注意,在您提供的引用[1]到[5]中,并未直接提到 "cumm"。这可能是一个拼写错误或特定项目名称(例如,可能意指 RAPIDS cuML 或其他 CUDA 相关库)。因此,我会基于 PyTorch 和 CUDA 的兼容性给出一般性指导,并推荐您验证 cumm 的官方资源以确保准确性。 ### 步骤 1: 确认环境兼容性 首先,根据您的引用,PyTorch 1.11.0 与 CUDA 11.3(cu113)在 Python 3.8 或更高版本上已验证兼容: - 引用[1] 显示,PyTorch 1.11.0(torch1.11.0+cu113)已成功安装在 Python 3.8.8 环境中,且支持 NVIDIA GPU(如 RTX 3090)[^1]。 - 引用[2] 提到,PyTorch 1.11.0+cu113 和 1.12.0+cu113 都可用,且 `torch.cuda.is_available()` 返回 True,表明 CUDA 11.3 工作正常[^2]。 - 引用[4] 和 [5] 进一步证实,PyTorch 1.12.x 与 CUDA 11.3 兼容,安装命令如 `conda install pytorch==1.12.1 ... cudatoolkit=11.3`,这暗示 CUDA 11.3 是一个稳定版本[^4][^5]。 对于 Python 3.10: - Python 3.10 是较新版本,许多库(包括 PyTorch)从 2022 年起开始支持。PyTorch 1.11.0 官方支持 Python 3.8-3.10,但需检查 cumm 是否明确兼容 Python 3.10。 ### 步骤 2: 确定 cumm 的兼容版本 cumm 不是一个标准库名,可能指以下情况: - **可能拼写错误**:如果您意指 **RAPIDS cuML**(一个 CUDA 加速的机器学习库),或 **CuPy**(类似 NumPy 的 CUDA 库),它们的版本需匹配 CUDA 和 PyTorch。 - **特定项目**:如果 cumm 是一个独立库(如 GitHub 上的自定义项目),您需检查其文档。 基于常见库的兼容性推断: - **RAPIDS cuML**:推荐版本为 **v22.04 或更新**(如 v22.06)。这些版本支持 CUDA 11.x 和 Python 3.10,且与 PyTorch 1.11.0 兼容。安装命令示例: ```bash conda install -c rapidsai -c nvidia -c conda-forge cuml=22.06 python=3.10 cudatoolkit=11.3 ``` - **CuPy**:推荐版本为 **v10.x 或更新**。CuPy v10+ 支持 CUDA 11.3 和 Python 3.10,可与 PyTorch 集成。 - **如果 cumm 是其他库**:请访问其 [PyPI 页面](https://pypi.org/project/cumm/) 或 GitHub 仓库(如有),查看版本要求。例如: - 检查 README 或 `setup.py` 文件,确认依赖项如 `torch>=1.11.0` 和 `cudatoolkit=11.3`。 - 搜索 issue 或讨论区,例如:"cumm Python 3.10 support"。 一般建议: - 确保环境一致:使用 conda 创建虚拟环境(如 `conda create -n pytorch_env python=3.10`),然后安装 PyTorch 和 cumm。 - 验证安装:在 Python 中运行: ```python import torch import cumm # 或实际库名 print(torch.__version__) # 应输出 1.11.0 print(torch.cuda.is_available()) # 应输出 True # 添加 cumm 的版本检查,如 cumm.__version__ ``` ### 步骤 3: 潜在问题与解决 - **兼容性风险**:Python 3.10 较新,一些库可能未完全适配。如果 cumm 不支持 Python 3.10,可降级到 Python 3.9(多数库更兼容)。 - **引用支持**:从引用[3]和[5]看,CUDA 11.3 是广泛使用的版本,安装命令中指定 `cudatoolkit=11.3` 可确保依赖对齐[^3][^5]。 ### 总结 要找到适配 Python 3.10、PyTorch 1.11.0 + CUDA 11.3 的 cumm 版本: 1. 确认 cumm 的具体含义(检查是否为 RAPIDS cuML 或其他)。 2. 访问官方资源(如 PyPI 或 GitHub)获取版本信息。 3. 推荐尝试 RAPIDS cuML v22.06 或 CuPy v10.x,并在虚拟环境中测试。 如果提供更多 cumm 的上下文(如库的全名或用途),我可以进一步细化建议。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值