From 9830234cac0d4abf2ae52a398830417580e50d06 Mon Sep 17 00:00:00 2001 From: hd9568 <2358440725@qq.com> Date: Wed, 12 Nov 2025 08:58:20 +0000 Subject: [PATCH] fix api_difference & add README.md --- .../torch_more_args/torch.nn.BCELoss.md | 3 +- .../torch.nn.BCEWithLogitsLoss.md | 3 +- .../torch.nn.CosineEmbeddingLoss.md | 3 +- .../torch.nn.CrossEntropyLoss.md | 3 +- .../torch.nn.HingeEmbeddingLoss.md | 3 +- .../torch_more_args/torch.nn.KLDivLoss.md | 3 +- .../torch_more_args/torch.nn.L1Loss.md | 3 +- .../torch_more_args/torch.nn.MSELoss.md | 3 +- .../torch.nn.MarginRankingLoss.md | 3 +- .../torch.nn.MultiLabelMarginLoss.md | 3 +- .../torch.nn.MultiLabelSoftMarginLoss.md | 3 +- .../torch.nn.MultiMarginLoss.md | 3 +- .../torch_more_args/torch.nn.NLLLoss.md | 3 +- .../torch.nn.PoissonNLLLoss.md | 3 +- .../torch_more_args/torch.nn.SmoothL1Loss.md | 3 +- .../torch.nn.SoftMarginLoss.md | 3 +- .../torch.nn.TripletMarginLoss.md | 3 +- ...orch.nn.functional.binary_cross_entropy.md | 3 +- ...tional.binary_cross_entropy_with_logits.md | 3 +- ...rch.nn.functional.cosine_embedding_loss.md | 3 +- .../torch.nn.functional.cross_entropy.md | 3 +- ...orch.nn.functional.hinge_embedding_loss.md | 3 +- .../torch.nn.functional.kl_div.md | 3 +- .../torch.nn.functional.l1_loss.md | 3 +- ...torch.nn.functional.margin_ranking_loss.md | 3 +- .../torch.nn.functional.mse_loss.md | 3 +- .../torch.nn.functional.multi_margin_loss.md | 3 +- ...ch.nn.functional.multilabel_margin_loss.md | 3 +- ....functional.multilabel_soft_margin_loss.md | 3 +- .../torch.nn.functional.nll_loss.md | 3 +- .../torch.nn.functional.poisson_nll_loss.md | 3 +- .../torch.nn.functional.soft_margin_loss.md | 3 +- ...torch.nn.functional.triplet_margin_loss.md | 3 +- .../convert_from_pytorch/deprecated/README.md | 132 +++++++++++++ .../convert_from_pytorch/tools/.gitignore | 7 +- .../convert_from_pytorch/tools/README.md | 184 ++++++++---------- .../tools/deprecated/torch.Tensor.clone.md | 21 -- .../deprecated/torch.Tensor.contiguous.md | 21 -- .../tools/deprecated/torch.Tensor.eq.md | 21 -- .../deprecated/torch.Tensor.is_contiguous.md | 21 -- .../tools/deprecated/torch.ge.md | 15 -- .../deprecated/torch.get_default_device.md | 15 -- .../tools/deprecated/torch.le.md | 42 ---- .../tools/deprecated/torch.lt.md | 33 ---- .../tools/deprecated/torch.ne.md | 39 ---- ...=> validate_api_difference_consistency.py} | 26 ++- .../tools/validate_api_difference_format.py | 4 +- .../tools/validate_pytorch_api_mapping.py | 33 ---- 48 files changed, 304 insertions(+), 409 deletions(-) create mode 100644 docs/guides/model_convert/convert_from_pytorch/deprecated/README.md delete mode 100644 docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.Tensor.clone.md delete mode 100644 docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.Tensor.contiguous.md delete mode 100644 docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.Tensor.eq.md delete mode 100644 docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.Tensor.is_contiguous.md delete mode 100644 docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.ge.md delete mode 100644 docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.get_default_device.md delete mode 100644 docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.le.md delete mode 100644 docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.lt.md delete mode 100644 docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.ne.md rename docs/guides/model_convert/convert_from_pytorch/tools/{validate_api_difference.py => validate_api_difference_consistency.py} (84%) diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.BCELoss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.BCELoss.md index e7df932c668..3afcbc019a5 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.BCELoss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.BCELoss.md @@ -26,6 +26,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: ### 转写示例 + #### size_average size_average 为 True ```python @@ -48,7 +49,7 @@ paddle.nn.BCELoss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.BCELoss(size_average=False) +torch.nn.BCELoss(reduce=True) # Paddle 写法 paddle.nn.BCELoss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.BCEWithLogitsLoss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.BCEWithLogitsLoss.md index e90c8fec52d..12ff093d8a3 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.BCEWithLogitsLoss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.BCEWithLogitsLoss.md @@ -29,6 +29,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: ### 转写示例 + #### size_average size_average 为 True ```python @@ -51,7 +52,7 @@ paddle.nn.BCEWithLogitsLoss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.BCEWithLogitsLoss(size_average=False) +torch.nn.BCEWithLogitsLoss(reduce=True) # Paddle 写法 paddle.nn.BCEWithLogitsLoss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.CosineEmbeddingLoss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.CosineEmbeddingLoss.md index 4571ec022c9..e8da5b11fcc 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.CosineEmbeddingLoss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.CosineEmbeddingLoss.md @@ -22,6 +22,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: ### 转写示例 + #### size_average size_average 为 True ```python @@ -44,7 +45,7 @@ paddle.nn.CosineEmbeddingLoss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.CosineEmbeddingLoss(size_average=False) +torch.nn.CosineEmbeddingLoss(reduce=True) # Paddle 写法 paddle.nn.CosineEmbeddingLoss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.CrossEntropyLoss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.CrossEntropyLoss.md index 966eed5ecf8..ce5abfce407 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.CrossEntropyLoss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.CrossEntropyLoss.md @@ -37,6 +37,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: ### 转写示例 + #### size_average size_average 为 True ```python @@ -59,7 +60,7 @@ paddle.nn.CrossEntropyLoss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.CrossEntropyLoss(size_average=False) +torch.nn.CrossEntropyLoss(reduce=True) # Paddle 写法 paddle.nn.CrossEntropyLoss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.HingeEmbeddingLoss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.HingeEmbeddingLoss.md index e9dd613cd27..55fe740b4c5 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.HingeEmbeddingLoss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.HingeEmbeddingLoss.md @@ -27,6 +27,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: ### 转写示例 + #### size_average size_average 为 True ```python @@ -49,7 +50,7 @@ paddle.nn.HingeEmbeddingLoss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.HingeEmbeddingLoss(size_average=False) +torch.nn.HingeEmbeddingLoss(reduce=True) # Paddle 写法 paddle.nn.HingeEmbeddingLoss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.KLDivLoss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.KLDivLoss.md index a7060ffcaf6..f5aecab138b 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.KLDivLoss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.KLDivLoss.md @@ -25,6 +25,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: ### 转写示例 + #### size_average size_average 为 True ```python @@ -47,7 +48,7 @@ paddle.nn.KLDivLoss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.KLDivLoss(size_average=False) +torch.nn.KLDivLoss(reduce=True) # Paddle 写法 paddle.nn.KLDivLoss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.L1Loss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.L1Loss.md index 759a8584090..39592b67eac 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.L1Loss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.L1Loss.md @@ -23,6 +23,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: ### 转写示例 + #### size_average size_average 为 True ```python @@ -45,7 +46,7 @@ paddle.nn.L1Loss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.L1Loss(size_average=False) +torch.nn.L1Loss(reduce=True) # Paddle 写法 paddle.nn.L1Loss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.MSELoss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.MSELoss.md index 9460311a27a..60ae87050e3 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.MSELoss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.MSELoss.md @@ -22,6 +22,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: ### 转写示例 + #### size_average size_average 为 True ```python @@ -44,7 +45,7 @@ paddle.nn.MSELoss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.MSELoss(size_average=False) +torch.nn.MSELoss(reduce=True) # Paddle 写法 paddle.nn.MSELoss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.MarginRankingLoss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.MarginRankingLoss.md index 587c2362090..b10971244cf 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.MarginRankingLoss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.MarginRankingLoss.md @@ -27,6 +27,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: ### 转写示例 + #### size_average size_average 为 True ```python @@ -49,7 +50,7 @@ paddle.nn.MarginRankingLoss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.MarginRankingLoss(size_average=False) +torch.nn.MarginRankingLoss(reduce=True) # Paddle 写法 paddle.nn.MarginRankingLoss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.MultiLabelMarginLoss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.MultiLabelMarginLoss.md index 24b30ca6a0a..fc76c63fcca 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.MultiLabelMarginLoss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.MultiLabelMarginLoss.md @@ -21,6 +21,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: ### 转写示例 + #### size_average size_average 为 True ```python @@ -43,7 +44,7 @@ paddle.nn.MultiLabelMarginLoss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.MultiLabelMarginLoss(size_average=False) +torch.nn.MultiLabelMarginLoss(reduce=True) # Paddle 写法 paddle.nn.MultiLabelMarginLoss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.MultiLabelSoftMarginLoss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.MultiLabelSoftMarginLoss.md index e00caea7c75..a96567650fa 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.MultiLabelSoftMarginLoss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.MultiLabelSoftMarginLoss.md @@ -22,6 +22,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: ### 转写示例 + #### size_average size_average 为 True ```python @@ -44,7 +45,7 @@ paddle.nn.MultiLabelSoftMarginLoss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.MultiLabelSoftMarginLoss(size_average=False) +torch.nn.MultiLabelSoftMarginLoss(reduce=True) # Paddle 写法 paddle.nn.MultiLabelSoftMarginLoss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.MultiMarginLoss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.MultiMarginLoss.md index 92a1070d466..05179773cf6 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.MultiMarginLoss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.MultiMarginLoss.md @@ -24,6 +24,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: ### 转写示例 + #### size_average size_average 为 True ```python @@ -46,7 +47,7 @@ paddle.nn.MultiMarginLoss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.MultiMarginLoss(size_average=False) +torch.nn.MultiMarginLoss(reduce=True) # Paddle 写法 paddle.nn.MultiMarginLoss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.NLLLoss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.NLLLoss.md index 973db4adc33..8a1904b4d65 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.NLLLoss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.NLLLoss.md @@ -30,6 +30,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: ### 转写示例 + #### size_average size_average 为 True ```python @@ -52,7 +53,7 @@ paddle.nn.NLLLoss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.NLLLoss(size_average=False) +torch.nn.NLLLoss(reduce=True) # Paddle 写法 paddle.nn.NLLLoss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.PoissonNLLLoss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.PoissonNLLLoss.md index 84bb602f918..f7161f5e8b2 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.PoissonNLLLoss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.PoissonNLLLoss.md @@ -24,6 +24,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: ### 转写示例 + #### size_average size_average 为 True ```python @@ -46,7 +47,7 @@ paddle.nn.PoissonNLLLoss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.PoissonNLLLoss(size_average=False) +torch.nn.PoissonNLLLoss(reduce=True) # Paddle 写法 paddle.nn.PoissonNLLLoss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.SmoothL1Loss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.SmoothL1Loss.md index 869a0c6e3ce..596a6ca811d 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.SmoothL1Loss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.SmoothL1Loss.md @@ -28,6 +28,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: ### 转写示例 + #### size_average size_average 为 True ```python @@ -50,7 +51,7 @@ paddle.nn.SmoothL1Loss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.SmoothL1Loss(size_average=False) +torch.nn.SmoothL1Loss(reduce=True) # Paddle 写法 paddle.nn.SmoothL1Loss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.SoftMarginLoss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.SoftMarginLoss.md index 733c61d283f..5aa71ee2502 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.SoftMarginLoss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.SoftMarginLoss.md @@ -24,6 +24,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: ### 转写示例 + #### size_average size_average 为 True ```python @@ -46,7 +47,7 @@ paddle.nn.SoftMarginLoss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.SoftMarginLoss(size_average=False) +torch.nn.SoftMarginLoss(reduce=True) # Paddle 写法 paddle.nn.SoftMarginLoss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.TripletMarginLoss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.TripletMarginLoss.md index cd4de378611..5042f565e3e 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.TripletMarginLoss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.TripletMarginLoss.md @@ -25,6 +25,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: ### 转写示例 + #### size_average size_average 为 True ```python @@ -47,7 +48,7 @@ paddle.nn.TripletMarginLoss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.TripletMarginLoss(size_average=False) +torch.nn.TripletMarginLoss(reduce=True) # Paddle 写法 paddle.nn.TripletMarginLoss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.binary_cross_entropy.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.binary_cross_entropy.md index 21ec8b41013..f71e1836e4c 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.binary_cross_entropy.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.binary_cross_entropy.md @@ -24,6 +24,7 @@ paddle.nn.functional.binary_cross_entropy(input, label, weight=None, reduction=' ### 转写示例 + #### size_average size_average 为 True ```python @@ -46,7 +47,7 @@ paddle.nn.functional.binary\_cross\_entropy(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.functional.binary_cross_entropy(size_average=False) +torch.nn.functional.binary_cross_entropy(reduce=True) # Paddle 写法 paddle.nn.functional.binary\_cross\_entropy(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.binary_cross_entropy_with_logits.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.binary_cross_entropy_with_logits.md index 90b11988d3c..0aadb84799d 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.binary_cross_entropy_with_logits.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.binary_cross_entropy_with_logits.md @@ -25,6 +25,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: ### 转写示例 + #### size_average size_average 为 True ```python @@ -47,7 +48,7 @@ paddle.nn.functional.binary_cross_entropy_with_logits(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.functional.binary_cross_entropy_with_logits(size_average=False) +torch.nn.functional.binary_cross_entropy_with_logits(reduce=True) # Paddle 写法 paddle.nn.functional.binary_cross_entropy_with_logits(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.cosine_embedding_loss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.cosine_embedding_loss.md index 82ac093b965..3613954e85c 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.cosine_embedding_loss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.cosine_embedding_loss.md @@ -25,6 +25,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: ### 转写示例 + #### size_average size_average 为 True ```python @@ -47,7 +48,7 @@ paddle.nn.functional.cosine_embedding_loss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.functional.cosine_embedding_loss(size_average=False) +torch.nn.functional.cosine_embedding_loss(reduce=True) # Paddle 写法 paddle.nn.functional.cosine_embedding_loss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.cross_entropy.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.cross_entropy.md index 53e8cbc2a2d..071812842a4 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.cross_entropy.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.cross_entropy.md @@ -44,6 +44,7 @@ paddle.nn.functional.cross_entropy(input, ### 转写示例 + #### size_average size_average 为 True ```python @@ -66,7 +67,7 @@ paddle.nn.functional.cross_entropy(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.functional.cross_entropy(size_average=False) +torch.nn.functional.cross_entropy(reduce=True) # Paddle 写法 paddle.nn.functional.cross_entropy(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.hinge_embedding_loss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.hinge_embedding_loss.md index 8974d36f032..aacd90f0336 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.hinge_embedding_loss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.hinge_embedding_loss.md @@ -24,6 +24,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: ### 转写示例 + #### size_average size_average 为 True ```python @@ -46,7 +47,7 @@ paddle.nn.functional.hinge_embedding_loss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.functional.hinge_embedding_loss(size_average=False) +torch.nn.functional.hinge_embedding_loss(reduce=True) # Paddle 写法 paddle.nn.functional.hinge_embedding_loss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.kl_div.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.kl_div.md index 4ea00b86778..9f77c19419c 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.kl_div.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.kl_div.md @@ -30,6 +30,7 @@ paddle.nn.functional.kl_div(input, ### 转写示例 + #### size_average size_average 为 True ```python @@ -52,7 +53,7 @@ paddle.nn.functional.kl_div(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.functional.kl_div(size_average=False) +torch.nn.functional.kl_div(reduce=True) # Paddle 写法 paddle.nn.functional.kl_div(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.l1_loss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.l1_loss.md index 4768bf163dd..c256fd0610a 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.l1_loss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.l1_loss.md @@ -23,6 +23,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: ### 转写示例 + #### size_average size_average 为 True ```python @@ -45,7 +46,7 @@ paddle.nn.functional.l1_loss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.functional.l1_loss(size_average=False) +torch.nn.functional.l1_loss(reduce=True) # Paddle 写法 paddle.nn.functional.l1_loss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.margin_ranking_loss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.margin_ranking_loss.md index 1612f23826d..0512a775f63 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.margin_ranking_loss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.margin_ranking_loss.md @@ -35,6 +35,7 @@ paddle.nn.functional.margin_ranking_loss(input, ### 转写示例 + #### size_average size_average 为 True ```python @@ -57,7 +58,7 @@ paddle.nn.functional.margin_ranking_loss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.functional.margin_ranking_loss(size_average=False) +torch.nn.functional.margin_ranking_loss(reduce=True) # Paddle 写法 paddle.nn.functional.margin_ranking_loss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.mse_loss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.mse_loss.md index 65bbed5e441..55d5e570929 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.mse_loss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.mse_loss.md @@ -29,6 +29,7 @@ paddle.nn.functional.mse_loss(input, ### 转写示例 + #### size_average size_average 为 True ```python @@ -51,7 +52,7 @@ paddle.nn.functional.mse_loss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.functional.mse_loss(size_average=False) +torch.nn.functional.mse_loss(reduce=True) # Paddle 写法 paddle.nn.functional.mse_loss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.multi_margin_loss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.multi_margin_loss.md index 928b54cf4e6..d71682542ef 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.multi_margin_loss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.multi_margin_loss.md @@ -26,6 +26,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: ### 转写示例 + #### size_average size_average 为 True ```python @@ -48,7 +49,7 @@ paddle.nn.functional.multi\_margin\_loss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.functional.multi_margin_loss(size_average=False) +torch.nn.functional.multi_margin_loss(reduce=True) # Paddle 写法 paddle.nn.functional.multi\_margin\_loss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.multilabel_margin_loss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.multilabel_margin_loss.md index d9aa876b86e..07474faffd5 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.multilabel_margin_loss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.multilabel_margin_loss.md @@ -23,6 +23,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: ### 转写示例 + #### size_average size_average 为 True ```python @@ -45,7 +46,7 @@ paddle.nn.functional.multi\_label\_margin\_loss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.functional.multilabel_margin_loss(size_average=False) +torch.nn.functional.multilabel_margin_loss(reduce=True) # Paddle 写法 paddle.nn.functional.multi\_label\_margin\_loss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.multilabel_soft_margin_loss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.multilabel_soft_margin_loss.md index f4c02299483..abc151e6c1e 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.multilabel_soft_margin_loss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.multilabel_soft_margin_loss.md @@ -24,6 +24,7 @@ PyTorch 相比 Paddle 支持更多其他参数,具体如下: ### 转写示例 + #### size_average size_average 为 True ```python @@ -46,7 +47,7 @@ paddle.nn.functional.multi\_label\_soft\_margin\_loss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.functional.multilabel_soft_margin_loss(size_average=False) +torch.nn.functional.multilabel_soft_margin_loss(reduce=True) # Paddle 写法 paddle.nn.functional.multi\_label\_soft\_margin\_loss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.nll_loss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.nll_loss.md index 1af74a65088..dcd9ad5b257 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.nll_loss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.nll_loss.md @@ -35,6 +35,7 @@ paddle.nn.functional.nll_loss(input, ### 转写示例 + #### size_average size_average 为 True ```python @@ -57,7 +58,7 @@ paddle.nn.functional.nll_loss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.functional.nll_loss(size_average=False) +torch.nn.functional.nll_loss(reduce=True) # Paddle 写法 paddle.nn.functional.nll_loss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.poisson_nll_loss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.poisson_nll_loss.md index ed72f7a3cc7..0e67eb2225a 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.poisson_nll_loss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.poisson_nll_loss.md @@ -26,6 +26,7 @@ paddle.nn.functional.poisson_nll_loss(input, label, log_input=True, full=False, ### 转写示例 + #### size_average size_average 为 True ```python @@ -48,7 +49,7 @@ paddle.nn.functional.poisson\_nll\_loss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.functional.poisson_nll_loss(size_average=False) +torch.nn.functional.poisson_nll_loss(reduce=True) # Paddle 写法 paddle.nn.functional.poisson\_nll\_loss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.soft_margin_loss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.soft_margin_loss.md index 1aa8c2b0e78..9d7129560d0 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.soft_margin_loss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.soft_margin_loss.md @@ -29,6 +29,7 @@ paddle.nn.functional.soft_margin_loss(input, ### 转写示例 + #### size_average size_average 为 True ```python @@ -51,7 +52,7 @@ paddle.nn.functional.soft_margin_loss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.functional.soft_margin_loss(size_average=False) +torch.nn.functional.soft_margin_loss(reduce=True) # Paddle 写法 paddle.nn.functional.soft_margin_loss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.triplet_margin_loss.md b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.triplet_margin_loss.md index cfeee44320b..9a4423b2a68 100644 --- a/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.triplet_margin_loss.md +++ b/docs/guides/model_convert/convert_from_pytorch/api_difference/torch_more_args/torch.nn.functional.triplet_margin_loss.md @@ -44,6 +44,7 @@ paddle.nn.functional.triplet_margin_loss(input, ### 转写示例 + #### size_average size_average 为 True ```python @@ -66,7 +67,7 @@ paddle.nn.functional.triplet_margin_loss(reduction='sum') reduce 为 True ```python # PyTorch 写法 -torch.nn.functional.triplet_margin_loss(size_average=False) +torch.nn.functional.triplet_margin_loss(reduce=True) # Paddle 写法 paddle.nn.functional.triplet_margin_loss(reduction='sum') diff --git a/docs/guides/model_convert/convert_from_pytorch/deprecated/README.md b/docs/guides/model_convert/convert_from_pytorch/deprecated/README.md new file mode 100644 index 00000000000..ce16a3e49ab --- /dev/null +++ b/docs/guides/model_convert/convert_from_pytorch/deprecated/README.md @@ -0,0 +1,132 @@ +# PyTorch-Paddle 映射文档自动化工具 + +代码自动转换工具的开发可以分为两部分,即[**撰写映射文档**](../pytorch_api_mapping_format_cn.html)和[配置转换规则](https://github.com/PaddlePaddle/PaConvert/blob/master/docs/CONTRIBUTING.md)。**撰写映射文档**的产出包括大量映射文档与汇总 [映射表](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/model_convert/convert_from_pytorch/pytorch_api_mapping_cn.html),分别对应 docs 仓库中的 [api_difference/](https://github.com/PaddlePaddle/docs/tree/develop/docs/guides/model_convert/convert_from_pytorch/api_difference) 目录与 [pytorch_api_mapping_cn.md](https://github.com/PaddlePaddle/docs/blob/develop/docs/guides/model_convert/convert_from_pytorch/pytorch_api_mapping_cn.md)。 + +由于 PyTorch api 功能复杂多样,且 PyTorch 历史遗留因素导致 api 功能风格多变,致使参数映射方式错综复杂,难以通过自动分析的方式进行映射方式推理与管理,因而映射文档目前均为人工撰写、检查与维护。但随着映射文档规模增大,人工检查成本日益繁重,带来了大量非必要心智负担。考虑到映射文档规范存在公共结构,通过自动读取与分析这些公共结构,可以批量得到映射文档的**元信息**,从而为映射文档的检查提供便利。 + +## 快速使用 + +在完成映射文档撰写后,调用**验证工具**进行验证: + +```bash +python docs/guides/model_convert/convert_from_pytorch/tools/validate_mapping_files.py +``` + +当映射文档内容存在问题时,验证工具会自动输出对应问题部分的内容。 + +验证无误后,调用**生成工具**进行生成: + +**注意:生成结果不要提交到仓库。** + +```bash +python docs/guides/model_convert/convert_from_pytorch/tools/apply_references.py --check_only +``` + +`--check_only` 参数用于表示只用于检查,生成结果保存到脚本同目录下的 `generated.tmp.md` 中。不使用该参数时,则生成并覆盖保存上级目录的 `pytorch_api_mapping_cn.md`。 + +CI 流程中会自动调用生成工具,验证工具则由开发者在开发文档时自行调用。 + +当验证工具可以通过,但生成工具出错(如 CI 未通过)时,很可能是因为该 API 在表格中会被生成多次,请检查 CI 最后的输出内容或在本地进行生成工具调用,检查生成结果是否符合预期。 + +## 映射文档结构分析 + +以 `torch.Tensor.arctan2` 映射文档为例,介绍其公共结构。 + +````markdown +## [ 仅参数名不一致 ]torch.Tensor.arctan2 + +### [torch.Tensor.arctan2](https://pytorch.org/docs/stable/generated/torch.arctan2.html#torch.arctan2) + +```python +torch.Tensor.arctan2(other) +``` + +### [paddle.Tensor.atan2](https://www.paddlepaddle.org.cn/documentation/docs/en/develop/api/paddle/Tensor_en.html) + +```python +paddle.Tensor.atan2(y, name=None) +``` + +两者功能一致且参数用法一致,仅参数名不一致,具体如下: + +### 参数映射 + +| PyTorch | PaddlePaddle | 备注 | +| --------- | ------------ | --------------------------------- | +| other | y | 表示输入的 Tensor ,仅参数名不一致。 | +```` + +可以看到,其包含的部分按照标题行可以划分成**映射文档标题**、**torch API**、**paddle API**与**参数映射**四个部分,其中: + +- **映射文档标题**: 包含 `映射类型` 与 `torch api`; +- **torch API**:包含 `torch api`、`torch url`(torch 文档链接)、`torch signature`(函数签名)三部分; +- **paddle API**:包含 `paddle api`、`paddle url`(paddle 文档链接)、`paddle signature`(函数签名)三部分; +- **参数映射**:包含一个表格,表格每行包含 `torch arg`、`paddle arg` 和其备注。 + +可以发现,这些公共结构中蕴含的部分信息是重复的,因此我们可以建立约束,对于重复的部分进行检查与验证。 + +## 映射文档自动化工具 + +映射文档自动化工具包含两部分,分别是[验证工具](https://github.com/PaddlePaddle/docs/blob/develop/docs/guides/model_convert/convert_from_pytorch/tools/validate_mapping_files.py)与[生成工具](https://github.com/PaddlePaddle/docs/blob/develop/docs/guides/model_convert/convert_from_pytorch/tools/apply_references.py)。 + +### 映射文档验证工具 + +根据映射文档的结构,可以设计状态机 `ParserState` 逐行处理映射文档,从而提取每篇映射文档的元数据,提取过程 `get_meta_from_diff_file` 包含以下检查: + +- `文件名` 和 **映射文档标题** 中的 `torch_api`、**torch API** 中的 `torch_api` 是否匹配; +- `torch API` 是否以 `torch.` 开头 *(第三方库限制以对应的第三方库名开头)*; +- `torch signature` 是否成功解析(属性 `torch.api_name` 或者函数签名 `torch.api_name(args)`); +- `torch API` 中 `torch api` 和 `torch signature` 解析结果是否一致; +- `paddle signature` 是否成功解析; +- `paddle API` 中 `paddle api` 和 `paddle signature` 解析结果是否一致; +- `参数映射` 表格是否成功解析(表格每行 3 列) +- 状态机结束状态: + - `仅 API 调用方式不一致` 或 `组合替代实现`:允许无参数映射表 + - `仅 API 调用方式不一致` 或 `组合替代实现`:允许无 **paddle API** 部分 + - 其他类型:必须有所有结构 + +通过设计这一系列约束,可以检查映射文档中粗心疏漏导致的错误,从而降低检查成本;此外,通过将文档解析得到结构化的元数据(`docs_mapping.json`),能为后续流程提供数据支持。 + +验证工具的使用方法为 `python docs/guides/model_convert/convert_from_pytorch/tools/validate_mapping_files.py`,其生成的内容均在脚本同目录下。 + +*为兼容第三方库的 api 映射语义,新版本将 `torch API` 修改为 `src API`,`paddle API` 修改为 `dst API`。* + +### 映射表生成工具 + +除了每个 api 的映射文档,随着映射文档的增删修改,映射表 [pytorch_api_mapping_cn.md](https://github.com/PaddlePaddle/docs/blob/develop/docs/guides/model_convert/convert_from_pytorch/pytorch_api_mapping_cn.md) 的维护也会对开发者造成额外的心智负担。为减轻工作量,在验证工具的基础上,采用预处理命令对映射表内容进行声明,在文档构建过程中根据映射文档元信息进行构建,从而实现生成的自动化。 + +#### 生成工具用法 + +映射表与映射文档的目录都按照包进行规划,因此可以首先设计以表为单位的预处理命令 `REFERENCE-MAPPING-TABLE`,语义上表示一个映射表格的引用。 + +**API 表引用格式** 为 ``REFERENCE-MAPPING-TABLE(prefix, max_depth=1)``,即首先传入一个 `prefix`,用于限制其包名,如 `torch.nn.functional.`,用于发现所有 `functional.` 的 api,随后可选传入一个 `max_depth`,表示其取成员的最大深度,该参数用于区分 `torch.XX` 和 `torch 其他类 API`。 + +除了支持自动生成表,另外两个功能分别是 API 别名引用与未实现 API 声明。 + +**API 别名引用格式** 为 `ALIAS-REFERENCE-ITEM(alias_name, api_name)`,但该项通常不需要手动来撰写。 + +要获得 API 别名引用表的预处理命令,首先将 [PaConvert](https://github.com/PaddlePaddle/PaConvert) 仓库的 `paconvert/api_alias_mapping.json` 链接或复制到 `docs/guides/model_convert/convert_from_pytorch/tools/api_alias_mapping.json` 位置,随后调用验证工具即可在同目录下生成 `alias_macro_lines.tmp.md`,其内容为所有 API 别名引用表的预处理命令。 + +API 别名表的生成逻辑与单个 API 项映射类似,实现于 `apply_reference_to_row_ex` 方法中,使用 `api_name` 对应的元数据进行生成。 + +**未实现 API 声明格式** 为 `NOT-IMPLEMENTED-ITEM(torch_api, torch_api_url)`,该项需要手动进行维护,因为仓库中不含该项的映射文档,因此在参数中包含其展示需要的信息。 + +在按照对应规则创建预处理命令后,通过直接调用 `python docs/guides/model_convert/convert_from_pytorch/tools/apply_references.py` 即可进行生成,将 `pytorch_api_mapping_cn.md` 中的预处理命令进行展开。 + +#### 生成工具原理 + +生成工具对映射表文件的处理包括两次读取和一次写入。 + +生成工具读取时,当遇到符合预期的表格表头即进入准备读取的状态,随后跳过表格的分隔线,开始对预处理命令的读取状态,直到所在行不是预处理命令时回到普通状态。 + +由于该读取逻辑可复用,因此将这部分逻辑实现在验证工具的 `process_mapping_index` 方法,通过传入 `item_processor` 回调和 `context` 上下文来控制行为,使用 `IndexParserState` 状态集来控制读取状态。 + +两次读取中,第一次读取用于分析表格匹配条件,第二次读取进行实际的预处理命令替换。 + +第一次读取时使用 `reference_table_scanner` 方法作为回调,收集所有的 API 表引用项,记录其参数作为 API 分类的条件。随后在生成工具的 `get_c2a_dict` 方法中对所有条件按照优先 `prefix` 长度降序,次优 `max_depth` 升序的顺序进行排序,并对所有映射文件元数据按照条件进行匹配。 + +第二次读取时使用 `reference_mapping_item_processor` 方法作为回调,对于所有需要处理的表格行进行转换,将转换结果写回 `context` 的 `output` 项中。 + +完成读取后,检查是否有 API 重复出现,如果重复出现则输出重复出现的 API 名称和所在行,不写回源文件并进行 CI 报错。 + +*不写回源文件时,输出结果会存储到 `generated.tmp.md` 中,便于调试。* diff --git a/docs/guides/model_convert/convert_from_pytorch/tools/.gitignore b/docs/guides/model_convert/convert_from_pytorch/tools/.gitignore index 4de583052ac..39cc1056893 100644 --- a/docs/guides/model_convert/convert_from_pytorch/tools/.gitignore +++ b/docs/guides/model_convert/convert_from_pytorch/tools/.gitignore @@ -4,8 +4,6 @@ generated.tmp.md tmp_check.md no_implement.md download_files_from_paconvert.sh -test -tmp_* # files will be used in PaConvert docs_mappings.json @@ -25,6 +23,7 @@ toc_warnings.txt unique_warnings.txt link_warnings.txt url_warnings.txt -api_difference_error.txt diff_doc_warnings.txt -validate_api_difference_error.txt + +validate_api_difference_consistency_error.txt +validate_api_difference_format_error.txt diff --git a/docs/guides/model_convert/convert_from_pytorch/tools/README.md b/docs/guides/model_convert/convert_from_pytorch/tools/README.md index ce16a3e49ab..e40ac2f3abc 100644 --- a/docs/guides/model_convert/convert_from_pytorch/tools/README.md +++ b/docs/guides/model_convert/convert_from_pytorch/tools/README.md @@ -1,132 +1,114 @@ # PyTorch-Paddle 映射文档自动化工具 -代码自动转换工具的开发可以分为两部分,即[**撰写映射文档**](../pytorch_api_mapping_format_cn.html)和[配置转换规则](https://github.com/PaddlePaddle/PaConvert/blob/master/docs/CONTRIBUTING.md)。**撰写映射文档**的产出包括大量映射文档与汇总 [映射表](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/model_convert/convert_from_pytorch/pytorch_api_mapping_cn.html),分别对应 docs 仓库中的 [api_difference/](https://github.com/PaddlePaddle/docs/tree/develop/docs/guides/model_convert/convert_from_pytorch/api_difference) 目录与 [pytorch_api_mapping_cn.md](https://github.com/PaddlePaddle/docs/blob/develop/docs/guides/model_convert/convert_from_pytorch/pytorch_api_mapping_cn.md)。 +本工具链旨在自动化生成与校验 PyTorch 与 PaddlePaddle 的 API 映射文档,通过解析差异文档、生成结构化数据、校验格式与一致性,确保映射文档的准确性与统一性。 -由于 PyTorch api 功能复杂多样,且 PyTorch 历史遗留因素导致 api 功能风格多变,致使参数映射方式错综复杂,难以通过自动分析的方式进行映射方式推理与管理,因而映射文档目前均为人工撰写、检查与维护。但随着映射文档规模增大,人工检查成本日益繁重,带来了大量非必要心智负担。考虑到映射文档规范存在公共结构,通过自动读取与分析这些公共结构,可以批量得到映射文档的**元信息**,从而为映射文档的检查提供便利。 - -## 快速使用 - -在完成映射文档撰写后,调用**验证工具**进行验证: +--- +## 目录结构 ```bash -python docs/guides/model_convert/convert_from_pytorch/tools/validate_mapping_files.py +tools/ +├── get_api_difference_info.py # 解析差异文档并生成结构化数据 +├── generate_pytorch_api_mapping.py # 生成最终映射文档 +├── validate_api_difference_consistency.py # 校验差异文档与 PaConvert 内容一致性 +├── validate_api_difference_format.py # 校验差异文档格式 +├── validate_pytorch_api_mapping.py # 校验映射文档格式与内容 +└── utils.py # 工具函数库 ``` -当映射文档内容存在问题时,验证工具会自动输出对应问题部分的内容。 +--- -验证无误后,调用**生成工具**进行生成: +## 文件说明 -**注意:生成结果不要提交到仓库。** +### 1. `get_api_difference_info.py` +**功能**: +- 使用状态机 `ParserState` 逐行解析差异文档,提取结构化数据。 +- 输出结果为 `api_difference_info.json`,保存在当前目录下。 +**使用方式**: ```bash -python docs/guides/model_convert/convert_from_pytorch/tools/apply_references.py --check_only +python docs/guides/model_convert/convert_from_pytorch/tools/get_api_difference_info.py ``` -`--check_only` 参数用于表示只用于检查,生成结果保存到脚本同目录下的 `generated.tmp.md` 中。不使用该参数时,则生成并覆盖保存上级目录的 `pytorch_api_mapping_cn.md`。 - -CI 流程中会自动调用生成工具,验证工具则由开发者在开发文档时自行调用。 - -当验证工具可以通过,但生成工具出错(如 CI 未通过)时,很可能是因为该 API 在表格中会被生成多次,请检查 CI 最后的输出内容或在本地进行生成工具调用,检查生成结果是否符合预期。 - -## 映射文档结构分析 +--- -以 `torch.Tensor.arctan2` 映射文档为例,介绍其公共结构。 - -````markdown -## [ 仅参数名不一致 ]torch.Tensor.arctan2 - -### [torch.Tensor.arctan2](https://pytorch.org/docs/stable/generated/torch.arctan2.html#torch.arctan2) - -```python -torch.Tensor.arctan2(other) -``` +### 2. `generate_pytorch_api_mapping.py` +**功能**: +- 整合 `api_difference_info.json`、`global_var.py`、`api_mapping.json`、`attribute_mapping.json` 生成最终映射文档 `pytorch_api_mapping_cn.md`。 其中`global_var.py`、`api_mapping.json`、`attribute_mapping.json`来自于 `PaConvert` 工具。 +- **分类逻辑**: + - 第一类 API(完全一致): 来自 `global_var.py` 中的 `NO_NEED_CONVERT_LIST`。 + - 第二类 API(调用方式不一致): 来自 `api_mapping.json` 与 `attribute_mapping.json`。 + - 其余类别: 从差异文档中提取。 +- **参数说明**: + - `--check`: 将映射文档保存为 `tmp_check.md`,避免覆盖原文件。 -### [paddle.Tensor.atan2](https://www.paddlepaddle.org.cn/documentation/docs/en/develop/api/paddle/Tensor_en.html) +**使用方式**: +```bash +# 生成正式文档 +python docs/guides/model_convert/convert_from_pytorch/tools/generate_pytorch_api_mapping.py -```python -paddle.Tensor.atan2(y, name=None) +# 本地测试预览 +python docs/guides/model_convert/convert_from_pytorch/tools/generate_pytorch_api_mapping.py --check ``` -两者功能一致且参数用法一致,仅参数名不一致,具体如下: - -### 参数映射 - -| PyTorch | PaddlePaddle | 备注 | -| --------- | ------------ | --------------------------------- | -| other | y | 表示输入的 Tensor ,仅参数名不一致。 | -```` - -可以看到,其包含的部分按照标题行可以划分成**映射文档标题**、**torch API**、**paddle API**与**参数映射**四个部分,其中: - -- **映射文档标题**: 包含 `映射类型` 与 `torch api`; -- **torch API**:包含 `torch api`、`torch url`(torch 文档链接)、`torch signature`(函数签名)三部分; -- **paddle API**:包含 `paddle api`、`paddle url`(paddle 文档链接)、`paddle signature`(函数签名)三部分; -- **参数映射**:包含一个表格,表格每行包含 `torch arg`、`paddle arg` 和其备注。 - -可以发现,这些公共结构中蕴含的部分信息是重复的,因此我们可以建立约束,对于重复的部分进行检查与验证。 - -## 映射文档自动化工具 - -映射文档自动化工具包含两部分,分别是[验证工具](https://github.com/PaddlePaddle/docs/blob/develop/docs/guides/model_convert/convert_from_pytorch/tools/validate_mapping_files.py)与[生成工具](https://github.com/PaddlePaddle/docs/blob/develop/docs/guides/model_convert/convert_from_pytorch/tools/apply_references.py)。 - -### 映射文档验证工具 +--- -根据映射文档的结构,可以设计状态机 `ParserState` 逐行处理映射文档,从而提取每篇映射文档的元数据,提取过程 `get_meta_from_diff_file` 包含以下检查: +### 3. `validate_pytorch_api_mapping.py` +**功能**: +- 校验映射文档格式与内容,包括以下规则: + 1. 校验开头的“API 映射分类”表格与后续标题一致性。 + 2. 确保每个 API 在表格中仅出现一次。 + 3. 校验表格中的 API 与差异文档一一对应。 + 4. 验证超链接的有效性(可选跳过)。 -- `文件名` 和 **映射文档标题** 中的 `torch_api`、**torch API** 中的 `torch_api` 是否匹配; -- `torch API` 是否以 `torch.` 开头 *(第三方库限制以对应的第三方库名开头)*; -- `torch signature` 是否成功解析(属性 `torch.api_name` 或者函数签名 `torch.api_name(args)`); -- `torch API` 中 `torch api` 和 `torch signature` 解析结果是否一致; -- `paddle signature` 是否成功解析; -- `paddle API` 中 `paddle api` 和 `paddle signature` 解析结果是否一致; -- `参数映射` 表格是否成功解析(表格每行 3 列) -- 状态机结束状态: - - `仅 API 调用方式不一致` 或 `组合替代实现`:允许无参数映射表 - - `仅 API 调用方式不一致` 或 `组合替代实现`:允许无 **paddle API** 部分 - - 其他类型:必须有所有结构 - -通过设计这一系列约束,可以检查映射文档中粗心疏漏导致的错误,从而降低检查成本;此外,通过将文档解析得到结构化的元数据(`docs_mapping.json`),能为后续流程提供数据支持。 - -验证工具的使用方法为 `python docs/guides/model_convert/convert_from_pytorch/tools/validate_mapping_files.py`,其生成的内容均在脚本同目录下。 - -*为兼容第三方库的 api 映射语义,新版本将 `torch API` 修改为 `src API`,`paddle API` 修改为 `dst API`。* - -### 映射表生成工具 - -除了每个 api 的映射文档,随着映射文档的增删修改,映射表 [pytorch_api_mapping_cn.md](https://github.com/PaddlePaddle/docs/blob/develop/docs/guides/model_convert/convert_from_pytorch/pytorch_api_mapping_cn.md) 的维护也会对开发者造成额外的心智负担。为减轻工作量,在验证工具的基础上,采用预处理命令对映射表内容进行声明,在文档构建过程中根据映射文档元信息进行构建,从而实现生成的自动化。 - -#### 生成工具用法 - -映射表与映射文档的目录都按照包进行规划,因此可以首先设计以表为单位的预处理命令 `REFERENCE-MAPPING-TABLE`,语义上表示一个映射表格的引用。 - -**API 表引用格式** 为 ``REFERENCE-MAPPING-TABLE(prefix, max_depth=1)``,即首先传入一个 `prefix`,用于限制其包名,如 `torch.nn.functional.`,用于发现所有 `functional.` 的 api,随后可选传入一个 `max_depth`,表示其取成员的最大深度,该参数用于区分 `torch.XX` 和 `torch 其他类 API`。 - -除了支持自动生成表,另外两个功能分别是 API 别名引用与未实现 API 声明。 - -**API 别名引用格式** 为 `ALIAS-REFERENCE-ITEM(alias_name, api_name)`,但该项通常不需要手动来撰写。 - -要获得 API 别名引用表的预处理命令,首先将 [PaConvert](https://github.com/PaddlePaddle/PaConvert) 仓库的 `paconvert/api_alias_mapping.json` 链接或复制到 `docs/guides/model_convert/convert_from_pytorch/tools/api_alias_mapping.json` 位置,随后调用验证工具即可在同目录下生成 `alias_macro_lines.tmp.md`,其内容为所有 API 别名引用表的预处理命令。 - -API 别名表的生成逻辑与单个 API 项映射类似,实现于 `apply_reference_to_row_ex` 方法中,使用 `api_name` 对应的元数据进行生成。 +**使用方式**: +```bash +# 默认校验映射文档 +python /workspace/paddleDocs/docs/guides/model_convert/convert_from_pytorch/tools/validate_pytorch_api_mapping.py -**未实现 API 声明格式** 为 `NOT-IMPLEMENTED-ITEM(torch_api, torch_api_url)`,该项需要手动进行维护,因为仓库中不含该项的映射文档,因此在参数中包含其展示需要的信息。 +# 跳过 URL 校验 +python /workspace/paddleDocs/docs/guides/model_convert/convert_from_pytorch/tools/validate_pytorch_api_mapping.py --skip-url-check -在按照对应规则创建预处理命令后,通过直接调用 `python docs/guides/model_convert/convert_from_pytorch/tools/apply_references.py` 即可进行生成,将 `pytorch_api_mapping_cn.md` 中的预处理命令进行展开。 +# 自定义映射文档路径 +python /workspace/paddleDocs/docs/guides/model_convert/convert_from_pytorch/tools/validate_pytorch_api_mapping.py --file /docs/guides/model_convert/convert_from_pytorch/tools/tmp_check.md +``` -#### 生成工具原理 +--- -生成工具对映射表文件的处理包括两次读取和一次写入。 +### 4. `validate_api_difference_format.py` +**功能**: +- 根据 `pytorch_api_mapping_format_cn.md` 的格式规范,校验所有差异文档。 +- 错误详情保存到 `validate_api_difference_format_error.txt`。 -生成工具读取时,当遇到符合预期的表格表头即进入准备读取的状态,随后跳过表格的分隔线,开始对预处理命令的读取状态,直到所在行不是预处理命令时回到普通状态。 +**使用方式**: +```bash +python docs/guides/model_convert/convert_from_pytorch/tools/validate_api_difference_format.py +``` -由于该读取逻辑可复用,因此将这部分逻辑实现在验证工具的 `process_mapping_index` 方法,通过传入 `item_processor` 回调和 `context` 上下文来控制行为,使用 `IndexParserState` 状态集来控制读取状态。 +--- -两次读取中,第一次读取用于分析表格匹配条件,第二次读取进行实际的预处理命令替换。 +### 5. `validate_api_difference_consistency.py` +**功能**: +- 校验差异文档与 `PaConvert/api_mapping.json`、`attribute_mapping.json` 的一致性,包括: + - `Matcher` 中的 `torch api` 是否有对应映射文档。 + - `torch api` 对应的 `paddle api` 在文档与 PaConvert 中是否一致。 + - 参数映射表是否包含 `kwargs_change`。 + - 函数签名是否与 `args_list` 一致。 +- 错误信息保存到 `validate_api_difference_consistency_error.txt`。 -第一次读取时使用 `reference_table_scanner` 方法作为回调,收集所有的 API 表引用项,记录其参数作为 API 分类的条件。随后在生成工具的 `get_c2a_dict` 方法中对所有条件按照优先 `prefix` 长度降序,次优 `max_depth` 升序的顺序进行排序,并对所有映射文件元数据按照条件进行匹配。 +**使用方式**: +```bash +python docs/guides/model_convert/convert_from_pytorch/tools/validate_api_difference_consistency.py +``` -第二次读取时使用 `reference_mapping_item_processor` 方法作为回调,对于所有需要处理的表格行进行转换,将转换结果写回 `context` 的 `output` 项中。 +--- -完成读取后,检查是否有 API 重复出现,如果重复出现则输出重复出现的 API 名称和所在行,不写回源文件并进行 CI 报错。 +### 6. `utils.py` +**功能**: +- 提供通用工具函数,包括: + - URL 生成与校验 + - JSON 文件加载 + - 第一类 API 提取 + - 字符串处理等 +--- -*不写回源文件时,输出结果会存储到 `generated.tmp.md` 中,便于调试。* +通过本工具链,开发者可高效维护 PyTorch 与 PaddlePaddle 的 API 映射文档,确保迁移工作的准确性与一致性。 diff --git a/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.Tensor.clone.md b/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.Tensor.clone.md deleted file mode 100644 index c5c32fa46ac..00000000000 --- a/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.Tensor.clone.md +++ /dev/null @@ -1,21 +0,0 @@ -## [ torch 参数更多 ] torch.Tensor.clone - -### [torch.Tensor.clone](https://pytorch.org/docs/stable/generated/torch.Tensor.clone.html#torch.Tensor.clone) - -```python -torch.Tensor.clone(*, memory_format=torch.preserve_format) -``` - -### [paddle.Tensor.clone](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/Tensor_cn.html#clone) - -```python -paddle.Tensor.clone() -``` - -PyTorch 相比 Paddle 支持更多其他参数,具体如下: - -### 参数映射 - -| PyTorch | PaddlePaddle | 备注 | -| ------------- | ------------ | ----------------------------------------------------------------------------------- | -| memory_format | - | 表示内存格式, Paddle 无此参数,一般对网络训练结果影响不大,可直接删除。 | diff --git a/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.Tensor.contiguous.md b/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.Tensor.contiguous.md deleted file mode 100644 index b5cf8aedc63..00000000000 --- a/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.Tensor.contiguous.md +++ /dev/null @@ -1,21 +0,0 @@ -## [ torch 参数更多 ] torch.Tensor.contiguous - -### [torch.Tensor.contiguous](https://pytorch.org/docs/stable/generated/torch.Tensor.contiguous.html) - -```python -torch.Tensor.contiguous(memory_format=torch.contiguous_format) -``` - -### [paddle.Tensor.contiguous](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/Tensor_cn.html#contiguous) - -```python -paddle.Tensor.contiguous() -``` - -PyTorch 相比 Paddle 支持更多其他参数,具体如下: - -### 参数映射 - -| PyTorch | PaddlePaddle | 备注 | -| ------------- | ------------ | ----------------------------------------------------------------------------------- | -| memory_format | - |表示内存格式,Paddle 无此参数,一般对网络训练结果影响不大,可直接删除。 | diff --git a/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.Tensor.eq.md b/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.Tensor.eq.md deleted file mode 100644 index f70202cbab2..00000000000 --- a/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.Tensor.eq.md +++ /dev/null @@ -1,21 +0,0 @@ -## [ 仅参数名不一致 ]torch.Tensor.eq - -### [torch.Tensor.eq](https://pytorch.org/docs/stable/generated/torch.Tensor.eq.html?highlight=eq#torch.Tensor.eq) - -```python -torch.Tensor.eq(other) -``` - -### [paddle.Tensor.equal](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/Tensor_cn.html#equal-y-name-none) - -```python -paddle.Tensor.equal(y, name=None) -``` - -两者功能一致且参数用法一致,仅参数名不一致,具体如下: - -### 参数映射 - -| PyTorch | PaddlePaddle | 备注 | -| ------- | ------------ | --------------------------- | -| other | y | 输入 Tensor,仅参数名不一致。 | diff --git a/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.Tensor.is_contiguous.md b/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.Tensor.is_contiguous.md deleted file mode 100644 index f7a60391f1c..00000000000 --- a/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.Tensor.is_contiguous.md +++ /dev/null @@ -1,21 +0,0 @@ -## [ torch 参数更多 ]torch.Tensor.is_contiguous - -### [torch.Tensor.is_contiguous](https://pytorch.org/docs/stable/generated/torch.Tensor.is_contiguous.html#torch-tensor-is-contiguous) - -```python -torch.Tensor.is_contiguous(memory_format=torch.contiguous_format) -``` - -### [paddle.Tensor.is_contiguous](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/Tensor_cn.html#is-contiguous) - -```python -paddle.Tensor.is_contiguous() -``` - -PyTorch 相比 Paddle 支持更多其他参数,具体如下: - -### 参数映射 - -| PyTorch | PaddlePaddle | 备注 | -| ------------- | ------------ | ----------------------------------------------------------------------------------- | -| memory_format | - |表示内存格式,Paddle 无此参数,一般对网络训练结果影响不大,可直接删除。 | diff --git a/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.ge.md b/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.ge.md deleted file mode 100644 index 3cac516b54d..00000000000 --- a/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.ge.md +++ /dev/null @@ -1,15 +0,0 @@ -## [仅 API 调用方式不一致]torch.ge - -### [torch.ge](https://pytorch.org/docs/stable/generated/torch.ge.html) - -```python -torch.ge(input, other, *, out) -``` - -### [paddle.greater\_equal](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/greater_equal_cn.html#greater-equal) - -```python -paddle.greater_equal(x, y) -``` - -PyTorch 相比 Paddle 支持更多其他参数,具体如下: diff --git a/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.get_default_device.md b/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.get_default_device.md deleted file mode 100644 index 827399c609d..00000000000 --- a/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.get_default_device.md +++ /dev/null @@ -1,15 +0,0 @@ -## [仅 API 调用方式不一致]torch.get_default_device - -### [torch.get_default_device](https://pytorch.org/docs/stable/generated/torch.get_default_device.html#torch-get-default-device) - -```python -torch.get_default_device() -``` - -### [paddle.device.get_device](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/device/get_device_cn.html#get-device) - -```python -paddle.device.get_device() -``` - -功能一致,无参数。 diff --git a/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.le.md b/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.le.md deleted file mode 100644 index 30a242e92fe..00000000000 --- a/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.le.md +++ /dev/null @@ -1,42 +0,0 @@ -## [ 输入参数类型不一致 ]torch.le - -### [torch.le](https://pytorch.org/docs/stable/generated/torch.le.html) - -```python -torch.le(input, other, *, out=None) -``` - -### [paddle.less_equal](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/less_equal_cn.html) - -```python -paddle.less_equal(x, y, name=None) -``` - -其中 Paddle 和 PyTorch 的 `other` 参数所支持的数据类型不一致,具体如下: -### 参数映射 - -| PyTorch | PaddlePaddle | 备注 | -| ------------- | ------------ | ------------------------------------------------------ | -| input | x | 表示输入的 Tensor ,仅参数名不一致。 | -| other | y | 表示输入的 Tensor ,PyTorch 支持 Python Number 和 Tensor 类型, Paddle 仅支持 Tensor 类型。当输入为 Python Number 类型时,需要转写。 | -| out | - | 表示输出的 Tensor , Paddle 无此参数,需要转写。 | - - -### 转写示例 -#### other:输入为 Number -```python -# PyTorch 写法 -torch.le(x, 2) - -# Paddle 写法 -paddle.less_equal(x, paddle.to_tensor(2)) -``` - -#### out:指定输出 -```python -# PyTorch 写法 -torch.le(x, y, out=output) - -# Paddle 写法 -paddle.assign(paddle.less_equal(x,y), output) -``` diff --git a/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.lt.md b/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.lt.md deleted file mode 100644 index b8454f8ea53..00000000000 --- a/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.lt.md +++ /dev/null @@ -1,33 +0,0 @@ -## [torch 参数更多 ]torch.lt - -### [torch.lt](https://pytorch.org/docs/stable/generated/torch.lt.html#torch.lt) - -```python -torch.lt(input, other, *, out=None) -``` - -### [paddle.less_than](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/less_than_cn.html) - -```python -paddle.less_than(x, y, name=None) -``` - -PyTorch 相比 Paddle 支持更多其他参数,具体如下: -### 参数映射 - -| PyTorch | PaddlePaddle | 备注 | -| ------------- | ------------ | ------------------------------------------------------ | -| input | x | 表示输入的 Tensor ,仅参数名不一致。 | -| other | y | 表示输入的 Tensor ,仅参数名不一致。 | -| out | - | 表示输出的 Tensor , Paddle 无此参数,需要转写。 | - - -### 转写示例 -#### out:指定输出 -```python -# PyTorch 写法 -torch.lt(x, y, out=output) - -# Paddle 写法 -paddle.assign(paddle.less_than(x,y), output) -``` diff --git a/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.ne.md b/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.ne.md deleted file mode 100644 index 3282e52d20a..00000000000 --- a/docs/guides/model_convert/convert_from_pytorch/tools/deprecated/torch.ne.md +++ /dev/null @@ -1,39 +0,0 @@ -## [torch 参数更多 ]torch.ne - -### [torch.ne](https://pytorch.org/docs/stable/generated/torch.ne.html?highlight=torch.ne#torch.ne) - -```python -torch.ne(input, - other, - *, - out=None) -``` - -### [paddle.not_equal](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/not_equal_cn.html#not_equal) - -```python -paddle.not_equal(x, - y, - name=None) -``` - -PyTorch 相比 Paddle 支持更多其他参数,具体如下: - -### 参数映射 - -| PyTorch | PaddlePaddle | 备注 | -| ------------- | ------------ | ------------------------------------------------------ | -| input | x | 输入的 Tensor ,仅参数名不一致。 | -| other | y | 输入的 Tensor ,仅参数名不一致。 | -| out | - | 表示输出的 Tensor ,Paddle 无此参数,需要转写。 | - - -### 转写示例 -#### out:指定输出 -```python -# PyTorch 写法 -torch.ne(input, other,out=y) - -# Paddle 写法 -paddle.assign(paddle.ne(input, other, y)) -``` diff --git a/docs/guides/model_convert/convert_from_pytorch/tools/validate_api_difference.py b/docs/guides/model_convert/convert_from_pytorch/tools/validate_api_difference_consistency.py similarity index 84% rename from docs/guides/model_convert/convert_from_pytorch/tools/validate_api_difference.py rename to docs/guides/model_convert/convert_from_pytorch/tools/validate_api_difference_consistency.py index 31b7fd72d97..fdb6b778506 100644 --- a/docs/guides/model_convert/convert_from_pytorch/tools/validate_api_difference.py +++ b/docs/guides/model_convert/convert_from_pytorch/tools/validate_api_difference_consistency.py @@ -1,8 +1,7 @@ -import json import os from pathlib import Path -from utils import extract_no_need_convert_list +from utils import extract_no_need_convert_list, load_mapping_json def validate_api_mappings(): @@ -11,21 +10,21 @@ def validate_api_mappings(): current_dir = Path(os.path.dirname(os.path.abspath(__file__))) # 加载API差异数据 - with open( - current_dir / "api_difference_info.json", "r", encoding="utf-8" - ) as f: - api_diff = json.load(f) + api_diff = load_mapping_json(current_dir / "api_difference_info.json") # 加载API映射数据 - with open(current_dir / "api_mapping.json", "r", encoding="utf-8") as f: - api_map = json.load(f) + api_map = load_mapping_json(current_dir / "api_mapping.json") + + attr_map = load_mapping_json(current_dir / "attribute_mapping.json") + + api_map = api_map | attr_map no_need_list = extract_no_need_convert_list( str(current_dir) + "/global_var.py" ) # 准备错误报告文件 - error_file = current_dir / "validate_api_difference_error.txt" + error_file = current_dir / "validate_api_difference_consistency_error.txt" # 任务1: 检查api_mapping中存在Matcher的条目是否在差异文档中有对应 with open(error_file, "w", encoding="utf-8") as err_file: @@ -68,6 +67,15 @@ def validate_api_mappings(): if "args_mapping" not in entry: continue for mapping in entry["args_mapping"]: + if mapping["dst_arg"] == "-": + mapping["dst_arg"] = "" + if "," in mapping["dst_arg"]: + mapping["dst_arg"] = ( + mapping["dst_arg"] + .replace(" ", "") + .replace("\t", "") + .split(",") + ) if ( mapping["src_arg"] == src_arg and mapping["dst_arg"] == dst_arg diff --git a/docs/guides/model_convert/convert_from_pytorch/tools/validate_api_difference_format.py b/docs/guides/model_convert/convert_from_pytorch/tools/validate_api_difference_format.py index c6aca23149a..5c2877e91ad 100644 --- a/docs/guides/model_convert/convert_from_pytorch/tools/validate_api_difference_format.py +++ b/docs/guides/model_convert/convert_from_pytorch/tools/validate_api_difference_format.py @@ -786,7 +786,9 @@ def main(): validator.run_validation() # 保存错误信息 - error_file = os.path.join(script_dir, "api_difference_error.txt") + error_file = os.path.join( + script_dir, "validate_api_difference_format_error.txt" + ) if validator.errors: with open(error_file, "w", encoding="utf-8") as f: for error in validator.errors: diff --git a/docs/guides/model_convert/convert_from_pytorch/tools/validate_pytorch_api_mapping.py b/docs/guides/model_convert/convert_from_pytorch/tools/validate_pytorch_api_mapping.py index 2d7715c7d94..493decbd39b 100644 --- a/docs/guides/model_convert/convert_from_pytorch/tools/validate_pytorch_api_mapping.py +++ b/docs/guides/model_convert/convert_from_pytorch/tools/validate_pytorch_api_mapping.py @@ -329,32 +329,6 @@ def check_links_exist(categories): return warnings -def check_mapping_category_consistency(categories): - """ - 检查映射分类列内容与类别标题的一致性 - """ - warnings = [] - - for category in categories: - category_id = category["id"] - category_name = category["name"] - - for i, row in enumerate(category["table"]): - row_num = i + 1 - mapping_category = row.get("mapping_category", "").strip() - - # 检查映射分类列是否与类别标题一致 - if mapping_category != category_name: - warning_msg = ( - f"类别 {category_id}({category_name}) 第 {row_num} 行映射分类不一致:\n" - f" 表格中的映射分类: '{mapping_category}'\n" - f" 类别标题: '{category_name}'" - ) - warnings.append(warning_msg) - - return warnings - - def check_diff_doc_consistency(categories, base_dir): """ 检查映射文档和差异文档的一致性 @@ -728,7 +702,6 @@ def main(): # 执行基本校验 toc_warnings = check_toc_consistency(toc, categories) unique_warnings = check_unique_torch_apis(categories) - mapping_category_warnings = check_mapping_category_consistency(categories) diff_doc_warnings = check_diff_doc_consistency(categories, base_dir) # 初始化 link_warnings 和 url_warnings(在 skip-url-check 时跳过) @@ -747,11 +720,6 @@ def main(): ("toc_warnings.txt", "目录一致性校验警告:", toc_warnings), ("unique_warnings.txt", "Torch API 唯一性校验警告:", unique_warnings), ("link_warnings.txt", "超链接存在性校验警告:", link_warnings), - ( - "mapping_category_warnings.txt", - "映射分类一致性校验警告:", - mapping_category_warnings, - ), ("diff_doc_warnings.txt", "差异文档一致性校验警告:", diff_doc_warnings), ] @@ -784,7 +752,6 @@ def main(): len(toc_warnings) + len(unique_warnings) + len(link_warnings) - + len(mapping_category_warnings) + len(url_warnings) ) total_warnings = total_errors + len(diff_doc_warnings)