From 98e28bdbbb155386f22986e403ddef033c1cbaba Mon Sep 17 00:00:00 2001 From: tedeasonwang Date: Mon, 1 Sep 2025 15:37:24 +0800 Subject: [PATCH 1/4] add transition and layernorm ops, update kpex_alphafold interface --- csrc/tpp/alphafold/bind.h | 10 ++++ csrc/tpp/alphafold/transition.cpp | 65 +++++++++++++++++++++++ csrc/tpp/alphafold/transition.h | 25 +++++++++ csrc/utils/check.h | 2 +- csrc/utils/layernorm.h | 36 +++++++++++++ kpex/tpp/alphafold/alphafold.py | 88 ++++++++++++++++++++++++++++++- setup.py | 6 ++- 7 files changed, 229 insertions(+), 3 deletions(-) create mode 100644 csrc/tpp/alphafold/transition.cpp create mode 100644 csrc/tpp/alphafold/transition.h create mode 100644 csrc/utils/layernorm.h diff --git a/csrc/tpp/alphafold/bind.h b/csrc/tpp/alphafold/bind.h index fb3a5cb..aaaab6e 100644 --- a/csrc/tpp/alphafold/bind.h +++ b/csrc/tpp/alphafold/bind.h @@ -5,6 +5,8 @@ #include #include "gating_attention.h" +#include "transition.h" +// #include "utils/layernorm.h" namespace alphafold { inline void bind(pybind11::module &m) @@ -17,5 +19,13 @@ inline void bind(pybind11::module &m) py::arg("output_w"), py::arg("output_b")); submodule.def("gating_attention", &gating_attention, py::arg("q_data"), py::arg("m_data"), py::arg("bias"), py::arg("nonbatched_bias"), py::arg("weights"), py::arg("block_size") = std::nullopt); + + py::class_(submodule, "TransitionWeight") + .def(py::init(), + py::arg("input_ln_w"), py::arg("input_ln_b"), py::arg("linear1_w"), py::arg("linear1_b"), py::arg("linear2_w"), + py::arg("linear2_b")); + submodule.def("transition", &transition, py::arg("act"), py::arg("weights")); + + // submodule.def("layernorm", &layernorm, py::arg("act"), py::arg("weight_"), py::arg("bias_")); } } \ No newline at end of file diff --git a/csrc/tpp/alphafold/transition.cpp b/csrc/tpp/alphafold/transition.cpp new file mode 100644 index 0000000..abdec33 --- /dev/null +++ b/csrc/tpp/alphafold/transition.cpp @@ -0,0 +1,65 @@ +// Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved + +#include "transition.h" +#include "utils/bf16.h" +#include "utils/TensorWrapper.h" +#include "utils/layernorm.h" +#include +#include +#include + +namespace alphafold { +at::Tensor transition(at::Tensor &act, const TransitionWeight &weights) +{ + at::Tensor out = act.new_empty(act.sizes()); + + int64_t batch = act.sizes()[0]; + int64_t n_res = act.sizes()[1]; + int64_t c_o = weights.c_o; + int64_t c_i = weights.c_i; + + KPEX_CHECK(act.dtype() == c10::kBFloat16, act.dtype()); + KPEX_CHECK(act.dim() == 3 && act.sizes()[0] == batch && act.sizes()[1] == n_res && act.sizes()[2] == c_o, act.sizes()); + act = act.contiguous(); + at::Tensor input_act = layernorm(act, weights.input_ln_w, weights.input_ln_b); + at::Tensor intermediate_act = act.new_empty({batch * n_res, c_i}); + + auto input_act_tw = convert_to_tensor_wrapper(input_act); + auto linear1_w_tw = convert_to_tensor_wrapper(weights.linear1_w); + auto linear1_b_tw = convert_to_tensor_wrapper(weights.linear1_b); + auto linear2_w_tw = convert_to_tensor_wrapper(weights.linear2_w); + auto linear2_b_tw = convert_to_tensor_wrapper(weights.linear2_b); + auto intermediate_act_tw = convert_to_tensor_wrapper(intermediate_act); + auto out_tw = convert_to_tensor_wrapper(out); + + kutacc_transition(input_act_tw.get_tensor(), linear1_w_tw.get_tensor(), linear1_b_tw.get_tensor(), linear2_w_tw.get_tensor(), linear2_b_tw.get_tensor(), + intermediate_act_tw.get_tensor(), out_tw.get_tensor(), batch, n_res, c_o, c_i); + return out; +} + +TransitionWeight::TransitionWeight(at::Tensor &input_ln_w, at::Tensor &input_ln_b, at::Tensor &linear1_w, + at::Tensor &linear1_b, at::Tensor &linear2_w, at::Tensor &linear2_b) + : c_o(input_ln_w.sizes()[0]), c_i(linear1_w.sizes()[0]) +{ + KPEX_CHECK_TENSOR_SHAPE(input_ln_w, c_o); + KPEX_CHECK_TENSOR_SHAPE(input_ln_b, c_o); + KPEX_CHECK_TENSOR_SHAPE(linear1_w, c_i, c_o); + KPEX_CHECK_TENSOR_SHAPE(linear1_b, c_i); + KPEX_CHECK_TENSOR_SHAPE(linear2_w, c_o, c_i); + KPEX_CHECK_TENSOR_SHAPE(linear2_b, c_o); + + auto float_opt = linear1_w.options().device(kpex::device()).dtype(c10::kFloat); + auto bf16_opt = linear1_w.options().device(kpex::device()).dtype(c10::kBFloat16); + + linear1_w = linear1_w.to(bf16_opt).contiguous(); + linear2_w = linear2_w.to(bf16_opt).contiguous(); + + this->linear1_w = linear_weight_prepack(linear1_w); + this->linear2_w = linear_weight_prepack(linear2_w); + + this->input_ln_w = input_ln_w.to(float_opt).contiguous(); + this->input_ln_b = input_ln_b.to(float_opt).contiguous(); + this->linear1_b = linear1_b.to(float_opt).contiguous(); + this->linear2_b = linear2_b.to(float_opt).contiguous(); +} +} \ No newline at end of file diff --git a/csrc/tpp/alphafold/transition.h b/csrc/tpp/alphafold/transition.h new file mode 100644 index 0000000..f9a16de --- /dev/null +++ b/csrc/tpp/alphafold/transition.h @@ -0,0 +1,25 @@ +// Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved + +#pragma once + +#include "utils/check.h" +#include + +namespace alphafold { +struct TransitionWeight { + int64_t c_o; + int64_t c_i; + + at::Tensor input_ln_w; + at::Tensor input_ln_b; + at::Tensor linear1_w; + at::Tensor linear1_b; + at::Tensor linear2_w; + at::Tensor linear2_b; + + TransitionWeight(at::Tensor &input_ln_w,at::Tensor &input_ln_b, at::Tensor &linear1_w, at::Tensor &linear1_b, + at::Tensor &linear2_w, at::Tensor &linear2_b); +}; + +at::Tensor transition(at::Tensor &act, const TransitionWeight &weights); +} \ No newline at end of file diff --git a/csrc/utils/check.h b/csrc/utils/check.h index 5d68539..fba2c03 100644 --- a/csrc/utils/check.h +++ b/csrc/utils/check.h @@ -41,7 +41,7 @@ inline void check_fail(std::string func, std::string file, int line, Args &&...a } while (0) #define KPEX_CHECK_TENSOR_SHAPE(tensor, ...) \ - KPEX_CHECK((tensor).sizes() == c10::IntArrayRef({__VA_ARGS__}), "invalid tensor shape: ", (tensor).sizes(), \ + KPEX_CHECK((tensor).sizes() == c10::IntArrayRef({__VA_ARGS__}), "invalid tensor shape: ", (tensor).sizes(), \ ", expect: ", c10::IntArrayRef({__VA_ARGS__})) #define KPEX_CHECK_TENSORWRAPPER_SHAPE(tensor, ...) \ diff --git a/csrc/utils/layernorm.h b/csrc/utils/layernorm.h new file mode 100644 index 0000000..4d7788e --- /dev/null +++ b/csrc/utils/layernorm.h @@ -0,0 +1,36 @@ +// Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved + +#pragma once + +#include +#include +#include "parallel.h" +#include +#include + +inline at::Tensor layernorm(const at::Tensor &act, const at::Tensor &weight_, const at::Tensor &bias_) +{ + KPEX_CHECK(act.dim() == 3, act.sizes()); + int64_t m = act.sizes()[0]; + int64_t n = act.sizes()[1]; + int64_t len = act.sizes()[2]; + KPEX_CHECK(act.strides()[2] == 1, act.strides()); + KPEX_CHECK(act.dtype() == c10::kBFloat16, act.dtype()); + KPEX_CHECK_TENSOR_SHAPE(weight_, len); + KPEX_CHECK_TENSOR_SHAPE(bias_, len); + auto weight = weight_.to(c10::kFloat); + auto bias = bias_.to(c10::kFloat); + auto out = act.new_empty(act.sizes()); + kpex::parallel_for(0, m * n, 1, [&](int64_t start, int64_t end) { + int64_t mi, ni; + at::native::data_index_init(start, mi, m, ni, n); + for ([[maybe_unused]] int64_t _ : c10::irange(start, end)) { + kutacc_layernorm( + (__bf16 *)act.data_ptr() + mi * act.strides()[0] + ni * act.strides()[1], + (float *)weight.data_ptr(), (float *)bias.data_ptr(), len, 1e-5, + (__bf16 *)out.data_ptr() + mi * out.strides()[0] + ni * out.strides()[1]); + at::native::data_index_step(mi, m, ni, n); + } + }); + return out; +} diff --git a/kpex/tpp/alphafold/alphafold.py b/kpex/tpp/alphafold/alphafold.py index 735bd5b..16cbaff 100644 --- a/kpex/tpp/alphafold/alphafold.py +++ b/kpex/tpp/alphafold/alphafold.py @@ -86,6 +86,73 @@ def gating_attention_forward(self, q_data, m_data, bias, nonbatched_bias=torch.T ) return out +def transition_forward(self, act, mask): + if not hasattr(self, "kpex_weights"): + self.kpex_weights = kernel.alphafold.TransitionWeight( + self.input_layer_norm.weight, + self.input_layer_norm.bias, + self.transition1.weight, + self.transition1.bias, + self.transition2.weight, + self.transition2.bias + ) + out = kernel.alphafold.transition(act.to(torch.bfloat16), self.kpex_weights) + return out + +# def InvariantPointAttention_forward(self, s, z, r, mask): +# if not hasattr(self, "kpex_weights"): +# self.kpex_weights = kernel.alphafold.InvariantPointAttentionWeight( +# self.c_s, +# self.c_z, +# self.c_hidden, +# self.no_heads, +# self.no_qk_points +# self.no_v_points, +# self.is_multimer, +# self.linear_q.weight, +# self.linear_q.bias, +# self.linear_kv.weight, +# self.linear_kv.bias, +# self.linear_q_points.weight, +# self.linear_q_points.bias, +# self.linear_kv_points.weight, +# self.linear_kv_points.bias, +# self.linear_b.weight, +# self.linear_b.bias, +# self.head_weights, +# self.linera_out.weight, +# self.linera_out.bias, +# ) +# out = kernel.alphafold.invariant_point_attention( +# s.to(torch.bfloat16), +# z.to(torch.bfloat16), +# r._trans, +# r_rots.get_rot_mats(), +# mask.to(torch.bfloat16), +# self.kpex_weights, +# ) +# return out + +# def rot_vec_mul( +# rot: torch.Tensor +# ): +# if(rot.shape[-2:] != (3, 3)): +# raise ValueError("Input roration is incorrectly shaped") + +# rot = [[rot[..., i, j] for j in range(3)] for i in range(3)] +# [[xx, xy, xz], [yx, yy, yz], [zx, zy, zz]] = rot + +# k = [ +# [xx + yy + zz, zy - yz, xz - zx, yx - xy], +# [zy - yz, xx - yy - zz, xy + yx, xz + zx], +# [xz - zx, xy + yx, yy - xx - zz, yz + zy], +# [yx - xy, xz + zx, yz + zy, zz - xx - yy], +# ] + +# k = (1. / 3.) * torch.stack([torch.stack(t, dim=-1) for t in k], dim=-2) + + + def kpex_alphafold(model, model_config, dtype=torch.float): new_model = copy.deepcopy(model) evoformer = new_model.model.impl.evoformer @@ -104,6 +171,14 @@ def kpex_alphafold(model, model_config, dtype=torch.float): gating_attention_forward, block.triangle_attention_ending_node.attention ) + block.msa_transition.forward = types.MethodType( + transition_forward, + block.msa_transition + ) + block.pair_transition.forward = types.MethodType( + transition_forward, + block.pair_transition + ) if hasattr(evoformer, "evoformer_iteration"): for block in evoformer.evoformer_iteration: block.msa_row_attention_with_pair_bias.attention.forward = types.MethodType( @@ -122,7 +197,14 @@ def kpex_alphafold(model, model_config, dtype=torch.float): gating_attention_forward, block.triangle_attention_ending_node.attention ) - + block.msa_transition.forward = types.MethodType( + transition_forward, + block.msa_transition + ) + block.pair_transition.forward = types.MethodType( + transition_forward, + block.pair_transition + ) if hasattr(evoformer, "template_embedding"): template_pair_sub_stack = evoformer.template_embedding.single_template_embedding.template_pair_stack.template_pair_sub_stack for block in template_pair_sub_stack: @@ -134,6 +216,10 @@ def kpex_alphafold(model, model_config, dtype=torch.float): gating_attention_forward, block.triangle_attention_ending_node.attention ) + block.pair_transition.forward = types.MethodType( + transition_forward, + block.pair_transition + ) return new_model diff --git a/setup.py b/setup.py index 81f511b..b53e44c 100644 --- a/setup.py +++ b/setup.py @@ -44,13 +44,17 @@ KUTACC_ROOT = os.environ.get("KUTACC_ROOT", None) if KUTACC_ROOT: include_dirs += [f"{KUTACC_ROOT}/include"] library_dirs = [f"{KUTACC_ROOT}/lib"] - libraries = ["kutacc"] + libraries += ["kutacc"] extra_compile_args += [f"-Wl, -rpath={KUTACC_ROOT}/lib"] library_dirs_example = [] libraries_example = [] KUPL_ROOT = os.environ.get("KUPL_ROOT", None) if KUPL_ROOT: + library_dirs += [f"{KUPL_ROOT}/include"] + libraries += [f"{KUPL_ROOT}/lib"] + libraries += ["kupl"] + library_dirs_example += [f"{KUPL_ROOT}/include"] libraries_example += [f"{KUPL_ROOT}/lib"] libraries_example = ["kupl"] -- Gitee From bc0963413bb4d21ded015d90d75539f9a73017ec Mon Sep 17 00:00:00 2001 From: tedeasonwang Date: Wed, 3 Sep 2025 17:22:21 +0800 Subject: [PATCH 2/4] add copyright information & unify conditional compilation information --- .gitignore | 12 ++++ LICENSE | 62 +++++++++-------- README.en.md | 12 ++++ README.md | 12 ++++ csrc/kpex.cpp | 15 ++++- csrc/tpp/alphafold/bind.h | 22 ++++-- csrc/tpp/alphafold/gating_attention.cpp | 15 ++++- csrc/tpp/alphafold/gating_attention.h | 20 ++++-- csrc/tpp/alphafold/transition.cpp | 15 ++++- csrc/tpp/alphafold/transition.h | 22 ++++-- csrc/utils/TensorWrapper.h | 20 +++++- csrc/utils/bf16.h | 24 +++++-- csrc/utils/check.h | 22 ++++-- csrc/utils/layernorm.h | 21 +++++- csrc/utils/memory.cpp | 13 ++++ csrc/utils/memory.h | 22 ++++-- csrc/utils/parallel.h | 20 +++++- kpex/__init__.py | 11 +++ kpex/frontend.py | 0 kpex/tpp/__init__.py | 11 +++ kpex/tpp/alphafold/__init__.py | 11 +++ kpex/tpp/alphafold/alphafold.py | 67 +++---------------- kpex_example/__init__.py | 11 +++ kpex_example/csrc/kpex_example.cpp | 15 ++++- kpex_example/csrc/kupl_example/bind.h | 22 ++++-- kpex_example/csrc/kupl_example/kupl_example.h | 20 ++++-- .../csrc/kupl_example/kupl_example_pf.cpp | 13 ++++ kpex_example/frontend.py | 0 kpex_example/kupl_example/__init__.py | 11 +++ kpex_example/kupl_example/kupl_example.py | 13 +++- setup.py | 13 +++- 31 files changed, 428 insertions(+), 139 deletions(-) delete mode 100644 kpex/frontend.py delete mode 100644 kpex_example/frontend.py diff --git a/.gitignore b/.gitignore index b8fa2d6..e45299c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,15 @@ +# Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. +# +# Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/LICENSE b/LICENSE index 0d80df7..7e3970c 100644 --- a/LICENSE +++ b/LICENSE @@ -1,28 +1,34 @@ -BSD 3-Clause License - -Copyright (c) 2025, 刘建国 - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +Open Software License + +Important Notice +====================================================================== + +This Open Software License 1.0 (hereinafter referred to as this "License") is a modified version of the MIT License, includes all of the terms and conditions of the MIT License, and additional conditions as below. + +BY DOWNLOADING, INSTALLING, OR USING THE SOFTWARE, YOU AGREE YOU HAVE FULLY UNDERSTOOD AND ACCEPTED THE TERMS CONTAINED HEREIN. IF YOU DO NOT AGREE TO ANY OF THE TERMS OF THIS LICENSE, OR IF YOU DO NOT QUALIFY FOR AGREEING TO THIS LICENSE, YOU ARE NOT AUTHORIZED TO AND SHALL NOT DOWNLOAD, INSTALL, OR MAKE ANY USE OF THE SOFTWARE. + +====================================================================== + +The MIT License + +Copyright (c) 2025 Huawei Technologies Co., Ltd. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sele copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +LICENSE +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +====================================================================== + Additional Conditions +====================================================================== +The Software may be utilized commercially, whether in source or executable forms, provided that you also meet all of the following conditions: + +a. You shall not use the Software or its derivative works in systems with processors other than Kunpeng processors. +b. You shall not make any use of the Software or its derivative works to develop or distribute any software for use in systems with processors other than Kunpeng processors. +c. You must include the same restrictions in Section a and b as an enforceable provision in any agreement (e.g., license agreement, terms of use, etc.) governing the use and/or distribution of the Software or Derivative Works. + +Kunpeng processors Definition: For the purposes of this license, "Kunpeng processors" mean the computing processor chipsets branded with "Kunpeng", "鲲鹏" or other brands owned or controlled by Huawei. + + +END OF THE TERMS AND CONDITIONS \ No newline at end of file diff --git a/README.en.md b/README.en.md index 8570e49..fcd4ae6 100644 --- a/README.en.md +++ b/README.en.md @@ -1,3 +1,15 @@ +# Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. +# +# Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + # kunpeng-extension-for-pytorch #### Description diff --git a/README.md b/README.md index 6281289..f96df0f 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,15 @@ +# Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. +# +# Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + # kunpeng-extension-for-pytorch #### 介绍 diff --git a/csrc/kpex.cpp b/csrc/kpex.cpp index e6d96b6..f0ddcf8 100644 --- a/csrc/kpex.cpp +++ b/csrc/kpex.cpp @@ -1,5 +1,16 @@ -// Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved - +/* + * Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. + * + * Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. +*/ #include "tpp/alphafold/bind.h" #include "utils/memory.h" #include diff --git a/csrc/tpp/alphafold/bind.h b/csrc/tpp/alphafold/bind.h index aaaab6e..6477947 100644 --- a/csrc/tpp/alphafold/bind.h +++ b/csrc/tpp/alphafold/bind.h @@ -1,6 +1,18 @@ -// Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved - -#pragma once +/* + * Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. + * + * Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. +*/ +#ifndef KPEX_TPP_ALPHAFOLD_BIND_H +#define KPEX_TPP_ALPHAFOLD_BIND_H #include @@ -28,4 +40,6 @@ inline void bind(pybind11::module &m) // submodule.def("layernorm", &layernorm, py::arg("act"), py::arg("weight_"), py::arg("bias_")); } -} \ No newline at end of file +} + +#endif \ No newline at end of file diff --git a/csrc/tpp/alphafold/gating_attention.cpp b/csrc/tpp/alphafold/gating_attention.cpp index faabf8d..28c05e0 100644 --- a/csrc/tpp/alphafold/gating_attention.cpp +++ b/csrc/tpp/alphafold/gating_attention.cpp @@ -1,5 +1,16 @@ -// Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved - +/* + * Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. + * + * Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. +*/ #include "gating_attention.h" #include #include diff --git a/csrc/tpp/alphafold/gating_attention.h b/csrc/tpp/alphafold/gating_attention.h index 48e85a3..b934344 100644 --- a/csrc/tpp/alphafold/gating_attention.h +++ b/csrc/tpp/alphafold/gating_attention.h @@ -1,6 +1,18 @@ -// Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved - -#pragma once +/* + * Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. + * + * Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. +*/ +#ifndef KUTACC_TPP_ALPHAFOLD_GATING_ATTENTION_H +#define KUTACC_TPP_ALPHAFOLD_GATING_ATTENTION_H #include "utils/check.h" #include @@ -42,4 +54,4 @@ at::Tensor gating_attention(at::Tensor &q_data, at::Tensor &m_data, at::Tensor & const GatingAttentionWeight &weights, std::optional block_size); } // namespace alphafold - +#endif diff --git a/csrc/tpp/alphafold/transition.cpp b/csrc/tpp/alphafold/transition.cpp index abdec33..b413622 100644 --- a/csrc/tpp/alphafold/transition.cpp +++ b/csrc/tpp/alphafold/transition.cpp @@ -1,5 +1,16 @@ -// Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved - +/* + * Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. + * + * Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. +*/ #include "transition.h" #include "utils/bf16.h" #include "utils/TensorWrapper.h" diff --git a/csrc/tpp/alphafold/transition.h b/csrc/tpp/alphafold/transition.h index f9a16de..2fd09aa 100644 --- a/csrc/tpp/alphafold/transition.h +++ b/csrc/tpp/alphafold/transition.h @@ -1,6 +1,18 @@ -// Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved - -#pragma once +/* + * Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. + * + * Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. +*/ +#ifndef KUTACC_TPP_ALPHAFOLD_TRANSITION_H +#define KUTACC_TPP_ALPHAFOLD_TRANSITION_H #include "utils/check.h" #include @@ -22,4 +34,6 @@ struct TransitionWeight { }; at::Tensor transition(at::Tensor &act, const TransitionWeight &weights); -} \ No newline at end of file +} + +#endif \ No newline at end of file diff --git a/csrc/utils/TensorWrapper.h b/csrc/utils/TensorWrapper.h index 6cf6ed4..6126833 100644 --- a/csrc/utils/TensorWrapper.h +++ b/csrc/utils/TensorWrapper.h @@ -1,6 +1,18 @@ -// Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved - -#pragma once +/* + * Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. + * + * Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. +*/ +#ifndef KPEX_UTILS_TENSORWRAPPER_H +#define KPEX_UTILS_TENSORWRAPPER_H #include #include @@ -49,3 +61,5 @@ inline at::Tensor linear_weight_prepack(const at::Tensor &weight, int64_t num_th kutacc_linear_weight_prepack((__bf16 *)weight.data_ptr(), (__bf16 *)result.data_ptr(), n, k, ldb); return result; } + +#endif \ No newline at end of file diff --git a/csrc/utils/bf16.h b/csrc/utils/bf16.h index e25e557..2f0d0fc 100644 --- a/csrc/utils/bf16.h +++ b/csrc/utils/bf16.h @@ -1,8 +1,18 @@ -// Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved - -// 临时文件,当前版本 bisheng 的 bf16支持较差,用 neon 函数代替 - -#pragma once +/* + * Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. + * + * Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. +*/ +#ifndef KUTACC_UTILS_BF16_H +#define KUTACC_UTILS_BF16_H #include #include @@ -17,4 +27,6 @@ static inline float to_float(__bf16 x) { return vcvtah_f32_bf16(x); } -} // namespace kpex \ No newline at end of file +} // namespace kpex + +#endif \ No newline at end of file diff --git a/csrc/utils/check.h b/csrc/utils/check.h index fba2c03..b9ddad3 100644 --- a/csrc/utils/check.h +++ b/csrc/utils/check.h @@ -1,6 +1,18 @@ -// Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved - -#pragma once +/* + * Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. + * + * Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. +*/ +#ifndef KUTACC_UTILS_CHECK_H +#define KUTACC_UTILS_CHECK_H #include #include @@ -47,4 +59,6 @@ inline void check_fail(std::string func, std::string file, int line, Args &&...a #define KPEX_CHECK_TENSORWRAPPER_SHAPE(tensor, ...) \ KPEX_CHECK(c10::IntArrayRef((tensor).sizes) == c10::IntArrayRef({__VA_ARGS__}), \ "invalid tensor wrapper shape: ", c10::IntArrayRef((tensor).sizes), \ - ", expect: ", c10::IntArrayRef({__VA_ARGS__})) \ No newline at end of file + ", expect: ", c10::IntArrayRef({__VA_ARGS__})) + +#endif \ No newline at end of file diff --git a/csrc/utils/layernorm.h b/csrc/utils/layernorm.h index 4d7788e..4d79a90 100644 --- a/csrc/utils/layernorm.h +++ b/csrc/utils/layernorm.h @@ -1,6 +1,18 @@ -// Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved - -#pragma once +/* + * Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. + * + * Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. +*/ +#ifndef KUTACC_UTILS_LAYERNORM_H +#define KUTACC_UTILS_LAYERNORM_H #include #include @@ -34,3 +46,6 @@ inline at::Tensor layernorm(const at::Tensor &act, const at::Tensor &weight_, co }); return out; } + + +#endif \ No newline at end of file diff --git a/csrc/utils/memory.cpp b/csrc/utils/memory.cpp index a3c7d96..c2a6b8d 100644 --- a/csrc/utils/memory.cpp +++ b/csrc/utils/memory.cpp @@ -1,3 +1,16 @@ +/* + * Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. + * + * Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. +*/ #include #include #include diff --git a/csrc/utils/memory.h b/csrc/utils/memory.h index 46aa327..ed8f517 100644 --- a/csrc/utils/memory.h +++ b/csrc/utils/memory.h @@ -1,6 +1,18 @@ -// Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved - -#pragma once +/* + * Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. + * + * Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. +*/ +#ifndef KUTACC_UTILS_MEMORY_H +#define KUTACC_UTILS_MEMORY_H #include #include @@ -34,4 +46,6 @@ inline std::unique_ptr > alloc(int64_t size) kpex_posix_memalign(&ptr, 64, size * sizeof(T)); return std::unique_ptr >((T *)ptr); } -} // namespace kpex \ No newline at end of file +} // namespace kpex + +#endif \ No newline at end of file diff --git a/csrc/utils/parallel.h b/csrc/utils/parallel.h index e32fc8d..45139fa 100644 --- a/csrc/utils/parallel.h +++ b/csrc/utils/parallel.h @@ -1,6 +1,18 @@ -// Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved - -#pragma once +/* + * Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. + * + * Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. +*/ +#ifndef KUTACC_UTILS_PARALLEL_H +#define KUTACC_UTILS_PARALLEL_H #include #include @@ -80,3 +92,5 @@ inline void parallel(int num_threads, const F& f) { } } // kpex + +#endif \ No newline at end of file diff --git a/kpex/__init__.py b/kpex/__init__.py index 56ffa47..7047c06 100644 --- a/kpex/__init__.py +++ b/kpex/__init__.py @@ -1 +1,12 @@ +# Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. +# +# Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. from . import tpp \ No newline at end of file diff --git a/kpex/frontend.py b/kpex/frontend.py deleted file mode 100644 index e69de29..0000000 diff --git a/kpex/tpp/__init__.py b/kpex/tpp/__init__.py index 54122cd..a2b578e 100644 --- a/kpex/tpp/__init__.py +++ b/kpex/tpp/__init__.py @@ -1 +1,12 @@ +# Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. +# +# Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. from . import alphafold \ No newline at end of file diff --git a/kpex/tpp/alphafold/__init__.py b/kpex/tpp/alphafold/__init__.py index 54122cd..a2b578e 100644 --- a/kpex/tpp/alphafold/__init__.py +++ b/kpex/tpp/alphafold/__init__.py @@ -1 +1,12 @@ +# Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. +# +# Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. from . import alphafold \ No newline at end of file diff --git a/kpex/tpp/alphafold/alphafold.py b/kpex/tpp/alphafold/alphafold.py index 16cbaff..d9d0d1c 100644 --- a/kpex/tpp/alphafold/alphafold.py +++ b/kpex/tpp/alphafold/alphafold.py @@ -1,5 +1,14 @@ -# Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved - +# Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. +# +# Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. import copy import time import types @@ -99,60 +108,6 @@ def transition_forward(self, act, mask): out = kernel.alphafold.transition(act.to(torch.bfloat16), self.kpex_weights) return out -# def InvariantPointAttention_forward(self, s, z, r, mask): -# if not hasattr(self, "kpex_weights"): -# self.kpex_weights = kernel.alphafold.InvariantPointAttentionWeight( -# self.c_s, -# self.c_z, -# self.c_hidden, -# self.no_heads, -# self.no_qk_points -# self.no_v_points, -# self.is_multimer, -# self.linear_q.weight, -# self.linear_q.bias, -# self.linear_kv.weight, -# self.linear_kv.bias, -# self.linear_q_points.weight, -# self.linear_q_points.bias, -# self.linear_kv_points.weight, -# self.linear_kv_points.bias, -# self.linear_b.weight, -# self.linear_b.bias, -# self.head_weights, -# self.linera_out.weight, -# self.linera_out.bias, -# ) -# out = kernel.alphafold.invariant_point_attention( -# s.to(torch.bfloat16), -# z.to(torch.bfloat16), -# r._trans, -# r_rots.get_rot_mats(), -# mask.to(torch.bfloat16), -# self.kpex_weights, -# ) -# return out - -# def rot_vec_mul( -# rot: torch.Tensor -# ): -# if(rot.shape[-2:] != (3, 3)): -# raise ValueError("Input roration is incorrectly shaped") - -# rot = [[rot[..., i, j] for j in range(3)] for i in range(3)] -# [[xx, xy, xz], [yx, yy, yz], [zx, zy, zz]] = rot - -# k = [ -# [xx + yy + zz, zy - yz, xz - zx, yx - xy], -# [zy - yz, xx - yy - zz, xy + yx, xz + zx], -# [xz - zx, xy + yx, yy - xx - zz, yz + zy], -# [yx - xy, xz + zx, yz + zy, zz - xx - yy], -# ] - -# k = (1. / 3.) * torch.stack([torch.stack(t, dim=-1) for t in k], dim=-2) - - - def kpex_alphafold(model, model_config, dtype=torch.float): new_model = copy.deepcopy(model) evoformer = new_model.model.impl.evoformer diff --git a/kpex_example/__init__.py b/kpex_example/__init__.py index f5ea76b..2e3f731 100644 --- a/kpex_example/__init__.py +++ b/kpex_example/__init__.py @@ -1 +1,12 @@ +# Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. +# +# Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. from . import kupl_example \ No newline at end of file diff --git a/kpex_example/csrc/kpex_example.cpp b/kpex_example/csrc/kpex_example.cpp index a0b5113..f9a6f6c 100644 --- a/kpex_example/csrc/kpex_example.cpp +++ b/kpex_example/csrc/kpex_example.cpp @@ -1,5 +1,16 @@ -// Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved - +/* + * Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. + * + * Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. +*/ #include "kupl_example/bind.h" #include "utils/memory.h" #include diff --git a/kpex_example/csrc/kupl_example/bind.h b/kpex_example/csrc/kupl_example/bind.h index a395f76..e6658c0 100644 --- a/kpex_example/csrc/kupl_example/bind.h +++ b/kpex_example/csrc/kupl_example/bind.h @@ -1,6 +1,18 @@ -// Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved - -#pragma once +/* + * Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. + * + * Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. +*/ +#ifndef KPEX_EXAMPLE_BIND_H +#define KPEX_EXAMPLE_BIND_H #include @@ -15,4 +27,6 @@ inline void bind(pybind11::module &m) submodule.def("test_kupl_parallel_error", &test_kupl_parallel_error); submodule.def("test_kupl_parallel_for_error", &test_kupl_parallel_for_error); } -} \ No newline at end of file +} + +#endif \ No newline at end of file diff --git a/kpex_example/csrc/kupl_example/kupl_example.h b/kpex_example/csrc/kupl_example/kupl_example.h index 4282b46..534f196 100644 --- a/kpex_example/csrc/kupl_example/kupl_example.h +++ b/kpex_example/csrc/kupl_example/kupl_example.h @@ -1,6 +1,18 @@ -// Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved - -#pragma once +/* + * Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. + * + * Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. +*/ +#ifndef KPEX_EXAMPLE_KUPL_EXAMPLE_H +#define KPEX_EXAMPLE_KUPL_EXAMPLE_H #include @@ -13,4 +25,4 @@ void test_kupl_parallel_for_error(); } // namespace kupl_example - +#endif \ No newline at end of file diff --git a/kpex_example/csrc/kupl_example/kupl_example_pf.cpp b/kpex_example/csrc/kupl_example/kupl_example_pf.cpp index a5a9ecd..cee04cb 100644 --- a/kpex_example/csrc/kupl_example/kupl_example_pf.cpp +++ b/kpex_example/csrc/kupl_example/kupl_example_pf.cpp @@ -1,3 +1,16 @@ +/* + * Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. + * + * Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. +*/ #include #include #include diff --git a/kpex_example/frontend.py b/kpex_example/frontend.py deleted file mode 100644 index e69de29..0000000 diff --git a/kpex_example/kupl_example/__init__.py b/kpex_example/kupl_example/__init__.py index f5ea76b..2e3f731 100644 --- a/kpex_example/kupl_example/__init__.py +++ b/kpex_example/kupl_example/__init__.py @@ -1 +1,12 @@ +# Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. +# +# Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. from . import kupl_example \ No newline at end of file diff --git a/kpex_example/kupl_example/kupl_example.py b/kpex_example/kupl_example/kupl_example.py index 96150e9..6d3a763 100644 --- a/kpex_example/kupl_example/kupl_example.py +++ b/kpex_example/kupl_example/kupl_example.py @@ -1,5 +1,14 @@ -# Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved - +# Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. +# +# Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. import copy import time import types diff --git a/setup.py b/setup.py index b53e44c..4056151 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,14 @@ -# Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved - +# Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. +# +# Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. from setuptools import setup, find_packages from torch.utils import cpp_extension import glob -- Gitee From 1899ad4f2a9a30fea24705eac328e613b904241e Mon Sep 17 00:00:00 2001 From: tedeasonwang Date: Fri, 5 Sep 2025 17:20:06 +0800 Subject: [PATCH 3/4] fix incorrect head files and incorrect kutacc interface using --- csrc/tpp/alphafold/gating_attention.cpp | 2 +- csrc/tpp/alphafold/gating_attention.h | 4 ++-- csrc/tpp/alphafold/transition.cpp | 2 +- csrc/tpp/alphafold/transition.h | 4 ++-- csrc/utils/bf16.h | 4 ++-- csrc/utils/check.h | 4 ++-- csrc/utils/layernorm.h | 4 ++-- csrc/utils/memory.h | 4 ++-- csrc/utils/parallel.h | 4 ++-- 9 files changed, 16 insertions(+), 16 deletions(-) diff --git a/csrc/tpp/alphafold/gating_attention.cpp b/csrc/tpp/alphafold/gating_attention.cpp index 28c05e0..5c9283b 100644 --- a/csrc/tpp/alphafold/gating_attention.cpp +++ b/csrc/tpp/alphafold/gating_attention.cpp @@ -133,7 +133,7 @@ at::Tensor gating_attention(at::Tensor &q_data, at::Tensor &m_data, at::Tensor & auto out_tw = convert_to_tensor_wrapper(out); - kutacc_gating_attention(input_tw.get_tensor(), q_tw.get_tensor(), k_tw.get_tensor(), v_tw.get_tensor(), + kutacc_af2_gating_attention(input_tw.get_tensor(), q_tw.get_tensor(), k_tw.get_tensor(), v_tw.get_tensor(), gate_tw.get_tensor(), weighted_avg_tw.get_tensor(), batch, seq_len, m_data_tw.get_tensor(), bias_tw.get_tensor(), nonbatched_bias_tw.get_tensor(), query_w_tw.get_tensor(), key_w_tw.get_tensor(), value_w_tw.get_tensor(), gating_w_tw.get_tensor(), gating_b_tw.get_tensor(), output_w_tw.get_tensor(), diff --git a/csrc/tpp/alphafold/gating_attention.h b/csrc/tpp/alphafold/gating_attention.h index b934344..dfb2dcf 100644 --- a/csrc/tpp/alphafold/gating_attention.h +++ b/csrc/tpp/alphafold/gating_attention.h @@ -11,8 +11,8 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef KUTACC_TPP_ALPHAFOLD_GATING_ATTENTION_H -#define KUTACC_TPP_ALPHAFOLD_GATING_ATTENTION_H +#ifndef KPEX_TPP_ALPHAFOLD_GATING_ATTENTION_H +#define KPEX_TPP_ALPHAFOLD_GATING_ATTENTION_H #include "utils/check.h" #include diff --git a/csrc/tpp/alphafold/transition.cpp b/csrc/tpp/alphafold/transition.cpp index b413622..639ccbb 100644 --- a/csrc/tpp/alphafold/transition.cpp +++ b/csrc/tpp/alphafold/transition.cpp @@ -43,7 +43,7 @@ at::Tensor transition(at::Tensor &act, const TransitionWeight &weights) auto intermediate_act_tw = convert_to_tensor_wrapper(intermediate_act); auto out_tw = convert_to_tensor_wrapper(out); - kutacc_transition(input_act_tw.get_tensor(), linear1_w_tw.get_tensor(), linear1_b_tw.get_tensor(), linear2_w_tw.get_tensor(), linear2_b_tw.get_tensor(), + kutacc_af2_transition(input_act_tw.get_tensor(), linear1_w_tw.get_tensor(), linear1_b_tw.get_tensor(), linear2_w_tw.get_tensor(), linear2_b_tw.get_tensor(), intermediate_act_tw.get_tensor(), out_tw.get_tensor(), batch, n_res, c_o, c_i); return out; } diff --git a/csrc/tpp/alphafold/transition.h b/csrc/tpp/alphafold/transition.h index 2fd09aa..8fef415 100644 --- a/csrc/tpp/alphafold/transition.h +++ b/csrc/tpp/alphafold/transition.h @@ -11,8 +11,8 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef KUTACC_TPP_ALPHAFOLD_TRANSITION_H -#define KUTACC_TPP_ALPHAFOLD_TRANSITION_H +#ifndef KPEX_TPP_ALPHAFOLD_TRANSITION_H +#define KPEX_TPP_ALPHAFOLD_TRANSITION_H #include "utils/check.h" #include diff --git a/csrc/utils/bf16.h b/csrc/utils/bf16.h index 2f0d0fc..1945369 100644 --- a/csrc/utils/bf16.h +++ b/csrc/utils/bf16.h @@ -11,8 +11,8 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef KUTACC_UTILS_BF16_H -#define KUTACC_UTILS_BF16_H +#ifndef KPEX_UTILS_BF16_H +#define KPEX_UTILS_BF16_H #include #include diff --git a/csrc/utils/check.h b/csrc/utils/check.h index b9ddad3..0d57155 100644 --- a/csrc/utils/check.h +++ b/csrc/utils/check.h @@ -11,8 +11,8 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef KUTACC_UTILS_CHECK_H -#define KUTACC_UTILS_CHECK_H +#ifndef KPEXC_UTILS_CHECK_H +#define KPEX_UTILS_CHECK_H #include #include diff --git a/csrc/utils/layernorm.h b/csrc/utils/layernorm.h index 4d79a90..7eb86a5 100644 --- a/csrc/utils/layernorm.h +++ b/csrc/utils/layernorm.h @@ -11,8 +11,8 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef KUTACC_UTILS_LAYERNORM_H -#define KUTACC_UTILS_LAYERNORM_H +#ifndef KPEX_UTILS_LAYERNORM_H +#define KPEX_UTILS_LAYERNORM_H #include #include diff --git a/csrc/utils/memory.h b/csrc/utils/memory.h index ed8f517..d611b56 100644 --- a/csrc/utils/memory.h +++ b/csrc/utils/memory.h @@ -11,8 +11,8 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef KUTACC_UTILS_MEMORY_H -#define KUTACC_UTILS_MEMORY_H +#ifndef KPEX_UTILS_MEMORY_H +#define KPEX_UTILS_MEMORY_H #include #include diff --git a/csrc/utils/parallel.h b/csrc/utils/parallel.h index 45139fa..890c5ec 100644 --- a/csrc/utils/parallel.h +++ b/csrc/utils/parallel.h @@ -11,8 +11,8 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef KUTACC_UTILS_PARALLEL_H -#define KUTACC_UTILS_PARALLEL_H +#ifndef KPEX_UTILS_PARALLEL_H +#define KPEX_UTILS_PARALLEL_H #include #include -- Gitee From 50190d6ef2464092e1011a08f515d3e03f42f4c9 Mon Sep 17 00:00:00 2001 From: tedeasonwang Date: Mon, 8 Sep 2025 11:49:23 +0800 Subject: [PATCH 4/4] repair README copyright's format --- README.en.md | 22 +++++++++++----------- README.md | 22 +++++++++++----------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/README.en.md b/README.en.md index fcd4ae6..f13e29c 100644 --- a/README.en.md +++ b/README.en.md @@ -1,14 +1,14 @@ -# Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. -# -# Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. + # kunpeng-extension-for-pytorch diff --git a/README.md b/README.md index f96df0f..be00f60 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,14 @@ -# Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved. -# -# Licensed under a modified version of the MIT license. See LICENSE in the project root for license information. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. + # kunpeng-extension-for-pytorch -- Gitee