Repository navigation
[PHI][CINN] Align linalg.solve kernel with torch - #72608
Merged
Merged
Conversation
|
你的PR提交成功,感谢你对开源项目的贡献! |
lshpku
force-pushed
the
fix-linalg-solve
branch
2 times, most recently
from
May 8, 2025 07:03
caa4e2d to
ad9dc8f
Compare
GITD245
pushed a commit
to GITD245/Paddle
that referenced
this pull request
May 14, 2025
wanghuancoder
pushed a commit
to wanghuancoder/Paddle
that referenced
this pull request
May 27, 2025
wanghuancoder
added a commit
that referenced
this pull request
Jun 3, 2025
* refine forrange (#72360) * refine forrange * refine forrange * reduce support big tensor (#71970) * reduce support big tensor * [PHI] Fix gridDim limit for reduce kernel (#72507) * [API] isclose support bigtensor (#72516) * isclose support bigtensor * refine * [API] isnan isinf isfinite support bigtensor (#72517) * isnan isinf isfinite support bigtensor * refine * [PHI] Fix cum kernel for big tensor (#72562) * [PHI] Preliminary fix for elementwise broadcast int32 shape overflow (#72584) * [PHI] Align linalg.solve kernel with torch (#72608) * Update strided copy kernel (#72662) * [PHI] Fix grid sample kernel for big tensor (#72628) * [PHI] Fix argsort big tensor bug (#72712) * [PHI] Fixed argsort big tensor bug * [PHI] Fixed shape mismatch problem. * [PHI] Fix contiguous kernel for big tensor (#72705) * [PHI] Fix flatten and split kernel for big tensor (#72634) * [PHI] Fix out-of-bound issue of paddle.take_along_axis (#72757) * [PHI] fix paddle.diag with big tensor (#72638) * [API] fix paddle.cross with big tensor (#72652) * [PHI] Fix paddle.where api for big tensor (#72717) * [PHI] Fix bincount kernel for big tensor (#72706) * fix bincount kernel for big tensor * use HostAlloc to alloc memory * add cpu test case * [PHI] Fix full_like kernel for big tensor (#72831) * [API] Fix int overflow and float16 support for paddle.frac (#72815) * [PHI] Align paddle.inner with torch in matmul logic (#72843) * [PHI] Fix paddle.var & paddle.std float16 overflow (#72650) * [PHI] Fix logsumexp precision problem (#72681) * [PHI] Debug for logsumexp, bug source found * [PHI] Removed GetNumBlocks func to get correct logsumexp * [PHI] Removed redundant debug VLOG * [PHI] Elegant grid bounded solution * [Accuracy diff No.55-56、76-77] Fix accuracy diff for var&std API (#72879) * [Accuracy diff No.21] Fix accuracy diff for heaviside API (#72894) --------- Co-authored-by: Shuhao Liang <50269654+lshpku@users.noreply.github.com> Co-authored-by: Qianyue He <46109954+Enigmatisms@users.noreply.github.com> Co-authored-by: Lei Ding <69283446+Dmovic@users.noreply.github.com> Co-authored-by: ggggxm <66855582+ggggxm@users.noreply.github.com> Co-authored-by: xkkkkkk23 <xiekeke@baidu.com> Co-authored-by: Zx <zhangxiao35@baidu.com> Co-authored-by: huangjiyi <43315610+huangjiyi@users.noreply.github.com> Co-authored-by: ooo oo <106524776+ooooo-create@users.noreply.github.com>
This was referenced Jul 29, 2025
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR Category
Operator Mechanism
PR Types
Bug fixes
Description
与torch对齐
paddle.linalg.solve的调用逻辑,提升数百倍性能,并修复大Tensor下的报错简介
linalg.solve用于求解矩阵方程
A @ X = B,其中A[batch_size, n, n],X[batch_size, n, nrhs],B[batch_size, n, nrhs](batch_size可以没有或者是多维)求解方法
首先对A做PLU分解,得到
P @ A = L @ U;其中P是一个permutation矩阵(实际实现中使用pivot数组记录),L是一个对角线全为1的下三角矩阵,U是一个上三角矩阵然后将
P @ A = L @ U做等价变换得到A = P^T @ L @ U,然后将A带入原来的方程A @ X = B中,得到P^T @ L @ U @ X = B接下来把P^T移到右边,得到
L @ U @ X = P @ B,由于P是一个permutation矩阵,因此这步只需要scatter操作即可,不需要真的矩阵乘最后进行两次triangular求解,将L和U依次移动到右边,即
L @ U @ X = P @ B==第1次求解=>U @ X = L^-1 @ P @ B==第2次求解=>X = U^-1 @ L^-1 @ P @ B此时
X = U^-1 @ L^-1 @ P @ B即是方程的解注:由于cublas使用列优先存储,而paddle使用行优先,出于性能考虑并没有对A在输入时进行转置(和torch保持一致),因此上述公式中A实际上是A^T,实际求解方程是
X = P^T @ L^T^-1 @ U^T^-1 @ B,cublas调用方法大致相同,只是顺序不同执行过程
参考torch实现:lu_solve_kernel
与torch对齐情况
关于int使用的说明
注意到,我在kernel中很多地方没有把int转成int64_t,包括n、nrhs,这是因为:
Pcard-85711