Skip to content

Commit edc68c5

Browse files
authored
Merge pull request #176
Adapt PyTorch 1.9.0 and support the C++ library.
2 parents eb4923d + ba72bad commit edc68c5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+686
-410
lines changed

.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ torch/share/
8989
torch/test/
9090
torch/version.py
9191

92-
intel_pytorch_extension_py/version.py
92+
torch_ipex/version.py
9393
torch_ipex/csrc/version.cpp
9494
torch_ipex/csrc/aten_ipex_sparse_type_default.*
9595
torch_ipex/csrc/cpu/SparseOPs*

.gitmodules

-6
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,6 @@
1-
[submodule "third_party/pybind11"]
2-
path = third_party/pybind11
3-
url = https://github.com/pybind/pybind11.git
41
[submodule "third_party/mkl-dnn"]
52
path = third_party/mkl-dnn
63
url = https://github.com/oneapi-src/oneDNN
74
[submodule "third_party/xsmm"]
85
path = third_party/xsmm
96
url = https://github.com/hfp/libxsmm.git
10-
[submodule "third_party/torch_ccl"]
11-
path = third_party/torch_ccl
12-
url = https://github.com/intel/torch-ccl.git

CMakeLists.txt

+1-4
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,11 @@ set(CMAKE_INSTALL_MESSAGE NEVER)
55
# set(CMAKE_VERBOSE_MAKEFILE ON)
66
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
77

8-
set(PLUGIN_NAME _torch_ipex)
8+
set(PLUGIN_NAME torch_ipex)
99

1010
set(RPATH_VALUE $ORIGIN)
1111
set(CMAKE_SKIP_BUILD_RPATH FALSE)
1212
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
13-
set(CMAKE_INSTALL_RPATH "${RPATH_VALUE}/lib/")
1413
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)
1514

1615
set(DPCPP_ROOT "${PROJECT_SOURCE_DIR}/torch_ipex/csrc")
@@ -20,6 +19,4 @@ list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules)
2019

2120
# Common dependencies
2221

23-
add_subdirectory(${DPCPP_THIRD_PARTY_ROOT}/pybind11)
24-
2522
include(cmake/CPU.cmake)

README.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ Intel® Extension for PyTorch (IPEX) is a Python package to extend official PyTo
2020
### Install PyTorch (Optional)
2121
|IPEX Version|PyTorch Version|
2222
|--|--|
23+
|[v1.9.0](https://github.com/intel/intel-extension-for-pytorch/tree/v1.9.0)|[v1.9.0](https://github.com/pytorch/pytorch/tree/v1.9.0 "v1.9.0")|
2324
|[v1.8.0](https://github.com/intel/intel-extension-for-pytorch/tree/v1.8.0)|[v1.8.0](https://github.com/pytorch/pytorch/tree/v1.8.0 "v1.8.0")|
2425
|[v1.2.0](https://github.com/intel/intel-extension-for-pytorch/tree/v1.2.0)|[v1.7.0](https://github.com/pytorch/pytorch/tree/v1.7.0 "v1.7.0")|
2526
|[v1.1.0](https://github.com/intel/intel-extension-for-pytorch/tree/v1.1.0)|[v1.5.0-rc3](https://github.com/pytorch/pytorch/tree/v1.5.0-rc3 "v1.5.0-rc3")|
@@ -38,16 +39,15 @@ From IPEX 1.8.0, compiling PyTorch from source is not required. If you still wan
3839
### Install IPEX via wheel file
3940

4041
```
41-
python -m pip install torch_ipex==1.8.0 -f https://software.intel.com/ipex-whl-stable
42+
python -m pip install torch_ipex==1.9.0 -f https://software.intel.com/ipex-whl-stable
4243
```
4344

4445
:information_source: Wheel files availability for Python versions
4546

4647
| IPEX Version | Python 3.6 | Python 3.7 | Python 3.8 | Python 3.9 |
4748
| :--: | :--: | :--: | :--: | :--: |
48-
| 1.8.0 | | :heavy_check_mark: | | |
49-
50-
**Note**: Currently we only provide wheel file for Python 3.7. For other Python versions, please follow instructions in the following section to compile from source.
49+
| 1.9.0 | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
50+
| 1.8.0 | | :heavy_check_mark: | | |
5151

5252
### Install IPEX by compiling from source
5353

cmake/CPU.cmake

+6-10
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@ SET(DNNL_ENABLE_PRIMITIVE_CACHE TRUE CACHE BOOL "" FORCE)
1111
SET(DNNL_LIBRARY_TYPE STATIC CACHE STRING "" FORCE)
1212

1313
set(DPCPP_CPU_ROOT "${PROJECT_SOURCE_DIR}/torch_ipex/csrc/cpu")
14-
add_subdirectory(${DPCPP_THIRD_PARTY_ROOT}/mkl-dnn)
15-
find_package(TorchCCL REQUIRED)
14+
add_subdirectory(${DPCPP_THIRD_PARTY_ROOT}/mkl-dnn EXCLUDE_FROM_ALL)
1615
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules)
1716

1817
FIND_PACKAGE(AVX)
@@ -141,9 +140,7 @@ endif()
141140
include_directories(${PROJECT_SOURCE_DIR})
142141
include_directories(${PROJECT_SOURCE_DIR}/torch_ipex)
143142
include_directories(${PROJECT_SOURCE_DIR}/torch_ipex/csrc/)
144-
include_directories(${DPCPP_THIRD_PARTY_ROOT}/pybind11/include)
145143
include_directories(${DPCPP_THIRD_PARTY_ROOT}/xsmm/include)
146-
include_directories(${TORCHCCL_INCLUDE_DIR})
147144

148145
# sources
149146
set(DPCPP_SRCS)
@@ -167,9 +164,8 @@ ExternalProject_Add(xsmm
167164
"-j"
168165
INSTALL_COMMAND ""
169166
)
170-
# Compile code with pybind11
171167
set(DPCPP_SRCS ${DPCPP_ATEN_SRCS} ${DPCPP_COMMON_SRCS} ${DPCPP_CPU_SRCS} ${DPCPP_JIT_SRCS})
172-
pybind11_add_module(${PLUGIN_NAME} SHARED ${DPCPP_SRCS})
168+
add_library(${PLUGIN_NAME} SHARED ${DPCPP_SRCS})
173169
target_link_libraries(${PLUGIN_NAME} PRIVATE ${DPCPP_THIRD_PARTY_ROOT}/xsmm/lib/libxsmm.a)
174170

175171
#link_directories(${PYTORCH_INSTALL_DIR}/lib)
@@ -188,15 +184,15 @@ else()
188184
message(FATAL_ERROR "Unknown ATen parallel backend: ${ATEN_THREADING}")
189185
endif()
190186

191-
add_dependencies(${PLUGIN_NAME} pybind11)
192-
add_dependencies(${PLUGIN_NAME} torch_ccl)
193187
add_dependencies(${PLUGIN_NAME} dnnl)
194188
target_link_libraries(${PLUGIN_NAME} PUBLIC dnnl)
195189
add_dependencies(${PLUGIN_NAME} xsmm)
196-
target_link_libraries(${PLUGIN_NAME} PUBLIC torch_ccl)
197190
link_directories(${PYTORCH_INSTALL_DIR}/lib)
198-
target_link_libraries(${PLUGIN_NAME} PUBLIC ${PYTORCH_INSTALL_DIR}/lib/libtorch_python.so)
199191
target_link_libraries(${PLUGIN_NAME} PUBLIC ${PYTORCH_INSTALL_DIR}/lib/libtorch_cpu.so)
200192
target_link_libraries(${PLUGIN_NAME} PUBLIC ${PYTORCH_INSTALL_DIR}/lib/libc10.so)
201193

202194
target_compile_options(${PLUGIN_NAME} PRIVATE "-DC10_BUILD_MAIN_LIB")
195+
196+
#set_property(TARGET ${PLUGIN_NAME} PROPERTY VERSION "${IPEX_VERSION}")
197+
#set_property(TARGET ${PLUGIN_NAME} PROPERTY SOVERSION "${IPEX_VERSION}")
198+
install(TARGETS ${PLUGIN_NAME} LIBRARY DESTINATION lib)

cmake/Modules/FindTorchCCL.cmake

+3
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ SET(TORCHCCL_INCLUDE_DIR)
1717

1818
SET(TORCHCCL_ROOT "${PROJECT_SOURCE_DIR}/third_party/torch_ccl")
1919

20+
SET(CMAKE_INSTALL_PREFIX_SAVED "${CMAKE_INSTALL_PREFIX}")
21+
SET(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX_SAVED}/../torch_ccl")
2022
ADD_SUBDIRECTORY(${TORCHCCL_ROOT})
23+
SET(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX_SAVED}")
2124
IF(NOT TARGET torch_ccl)
2225
MESSAGE(FATAL_ERROR "Failed to include torch_ccl target")
2326
ENDIF()

docker/Dockerfile

+16-10
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
# syntax = docker/dockerfile:experimental
22
# based onhttps://github.com/pytorch/pytorch/blob/master/Dockerfile
3-
#
3+
#
44
# NOTE: To build this you will need a docker version > 18.06 with
55
# experimental enabled and DOCKER_BUILDKIT=1
66
#
77
# If you do not use buildkit you are not going to have a good time
88
#
9-
# For reference:
9+
# For reference:
1010
# https://docs.docker.com/develop/develop-images/build_enhancements/
1111

1212
ARG BASE_IMAGE=ubuntu:20.04
@@ -26,6 +26,7 @@ RUN --mount=type=cache,id=apt-dev,target=/var/cache/apt \
2626
libjpeg-dev \
2727
pybind11-dev \
2828
libpng-dev \
29+
pybind11-dev \
2930
&& rm -rf /var/lib/apt/lists/*
3031
RUN /usr/sbin/update-ccache-symlinks
3132
RUN mkdir /opt/ccache && ccache --set-config=cache_dir=/opt/ccache
@@ -41,24 +42,29 @@ RUN curl -fsSL -v -o ~/miniconda.sh -O https://repo.anaconda.com/miniconda/Mini
4142
/opt/conda/bin/conda clean -ya
4243

4344
FROM dev-base AS build
44-
ARG IPEX_VERSION=v1.8.0
45-
ARG PYTORCH_VERSION=v1.8.0
45+
ARG IPEX_VERSION=v1.9.0
46+
ARG PYTORCH_VERSION=v1.9.0
47+
ARG TORCHVISION_VERSION=0.10.0+cpu
48+
ARG TORCHAUDIO_VERSION=0.9.0
4649
COPY --from=conda /opt/conda /opt/conda
4750
RUN --mount=type=cache,target=/opt/ccache \
48-
pip3 install torch==${PYTORCH_VERSION}+cpu torchvision \
49-
-f https://download.pytorch.org/whl/torch_stable.html && \
50-
git clone -b ${IPEX_VERSION} --single-branch https://github.com/intel/intel-extension-for-pytorch && \
51-
cd intel-extension-for-pytorch && git submodule sync && \
51+
pip install torch==${PYTORCH_VERSION}+cpu torchvision==${TORCHVISION_VERSION} torchaudio==${TORCHAUDIO_VERSION} -f https://download.pytorch.org/whl/torch_stable.html && \
52+
git clone https://github.com/intel/intel-extension-for-pytorch && \
53+
cd intel-extension-for-pytorch && \
54+
git checkout ${IPEX_VERSION} && \
55+
git submodule sync && \
5256
git submodule update --init --recursive && \
5357
pip3 install -r requirements.txt && \
54-
pip3 install -v . && rm -rf *
58+
python setup.py bdist_wheel && \
59+
pip3 install dist/*.whl && \
60+
cd .. && rm -rf intel-extension-for-pytorch
5561

5662
FROM dev-base as dev
5763
COPY --from=build /opt/conda /opt/conda
5864
ARG OMP_NUM_THREADS=1
5965
ENV OMP_NUM_THREADS ${OMP_NUM_THREADS}
6066
ARG KMP_BLOCKTIME=1
61-
ENV KMP_BLOCKTIME ${KMP_BLOCKTIME}
67+
ENV KMP_BLOCKTIME ${KMP_BLOCKTIME}
6268
ARG KMP_HW_SUBSET=1T
6369
ENV KMP_HW_SUBSET ${KMP_HW_SUBSET}
6470
ENV LD_PRELOAD "/opt/conda/lib/libiomp5.so /usr/lib/x86_64-linux-gnu/libtcmalloc.so"

docker/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@
1010

1111
```console
1212
$ cd $DOCKERFILE_DIR
13-
$ DOCKER_BUILDKIT=1 docker build --build-arg IPEX_VERSION=v1.8.0 --build-arg PYTORCH_VERSION=v1.8.0 -t intel-extension-for-pytorch:test .
13+
$ DOCKER_BUILDKIT=1 docker build -t intel-extension-for-pytorch:test .
1414
$ docker run intel-extension-for-pytorch:test python -c "import torch;import intel_pytorch_extension as ipex;print('torch:', torch.__version__,' ipex:',ipex.__version__)"
1515
```

intel_pytorch_extension_py/ops/embeddingbag.py

-14
This file was deleted.

scripts/cpu/gen-dense-cpu-ops.py

+51-1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
'aten::mul_.Tensor(Tensor(a!) self, Tensor other) -> Tensor(a!)',
3333
'aten::mul.out(Tensor self, Tensor other, *, Tensor(a!) out) -> Tensor(a!)',
3434
'aten::linear(Tensor input, Tensor weight, Tensor? bias=None) -> Tensor',
35+
# 'aten::batch_norm(Tensor input, Tensor? weight, Tensor? bias, Tensor? running_mean, Tensor? running_var, bool training, float momentum, float eps, bool cudnn_enabled) -> Tensor',
3536
'aten::native_batch_norm(Tensor input, Tensor? weight, Tensor? bias, Tensor? running_mean, Tensor? running_var, bool training, float momentum, float eps) -> (Tensor, Tensor, Tensor)',
3637
'aten::native_batch_norm_backward(Tensor grad_out, Tensor input, Tensor? weight, Tensor? running_mean, Tensor? running_var, Tensor? save_mean, Tensor? save_invstd, bool train, float eps, bool[3] output_mask) -> (Tensor, Tensor, Tensor)',
3738
'aten::avg_pool2d(Tensor self, int[2] kernel_size, int[2] stride=[], int[2] padding=0, bool ceil_mode=False, bool count_include_pad=True, int? divisor_override=None) -> Tensor',
@@ -75,7 +76,7 @@
7576
'aten::clone(Tensor self, *, MemoryFormat? memory_format=None) -> Tensor',
7677
'aten::gelu(Tensor self) -> Tensor',
7778
'aten::gelu_backward(Tensor grad, Tensor self) -> Tensor',
78-
'aten::slice.Tensor(Tensor(a) self, int dim=0, int? start=0, int? end=9223372036854775807, int step=1) -> Tensor(a)',
79+
'aten::slice.Tensor(Tensor(a) self, int dim=0, int? start=None, int? end=None, int step=1) -> Tensor(a)',
7980
'aten::select.int(Tensor(a) self, int dim, int index) -> Tensor(a)',
8081
'aten::select.Dimname(Tensor(a) self, Dimname dim, int index) -> Tensor(a)',
8182
'aten::unbind.int(Tensor(a) self, int dim=0) -> Tensor(a)[]',
@@ -112,6 +113,10 @@
112113
'aten::div.Scalar(Tensor self, Scalar other) -> Tensor',
113114
'aten::div.out(Tensor self, Tensor other, *, Tensor(a!) out) -> Tensor(a!)',
114115
'aten::permute(Tensor(a) self, int[] dims) -> Tensor(a)',
116+
'aten::to.dtype_layout(Tensor self, *, ScalarType? dtype=None, Layout? layout=None, Device? device=None, bool? pin_memory=None, bool non_blocking=False, bool copy=False, MemoryFormat? memory_format=None) -> Tensor',
117+
'aten::to.device(Tensor self, Device device, ScalarType dtype, bool non_blocking=False, bool copy=False, MemoryFormat? memory_format=None) -> Tensor',
118+
'aten::to.dtype(Tensor self, ScalarType dtype, bool non_blocking=False, bool copy=False, MemoryFormat? memory_format=None) -> Tensor',
119+
'aten::to.other(Tensor self, Tensor other, bool non_blocking=False, bool copy=False, MemoryFormat? memory_format=None) -> Tensor',
115120
]
116121

117122
_FN_IPEX_FUNCS_WITH_SIMPLE_ATEN_SIG = [
@@ -126,6 +131,41 @@
126131
'aten::div.out(Tensor self, Tensor other, *, Tensor(a!) out) -> Tensor(a!)',
127132
]
128133

134+
_FN_EXCLUDE_FUNCS_WITH_SIMPLE_ATEN_SIG = [
135+
"aten::conv1d(Tensor input, Tensor weight, Tensor? bias=None, int[1] stride=1, int[1] padding=0, int[1] dilation=1, int groups=1) -> Tensor",
136+
"aten::conv2d(Tensor input, Tensor weight, Tensor? bias=None, int[2] stride=1, int[2] padding=0, int[2] dilation=1, int groups=1) -> Tensor",
137+
"aten::conv3d(Tensor input, Tensor weight, Tensor? bias=None, int[3] stride=1, int[3] padding=0, int[3] dilation=1, int groups=1) -> Tensor",
138+
"aten::conv1d.padding(Tensor input, Tensor weight, Tensor? bias=None, int[1] stride=1, str padding=\"valid\", int[1] dilation=1, int groups=1) -> Tensor",
139+
"aten::conv2d.padding(Tensor input, Tensor weight, Tensor? bias=None, int[2] stride=1, str padding=\"valid\", int[2] dilation=1, int groups=1) -> Tensor",
140+
"aten::conv3d.padding(Tensor input, Tensor weight, Tensor? bias=None, int[3] stride=1, str padding=\"valid\", int[3] dilation=1, int groups=1) -> Tensor",
141+
"aten::convolution(Tensor input, Tensor weight, Tensor? bias, int[] stride, int[] padding, int[] dilation, bool transposed, int[] output_padding, int groups) -> Tensor",
142+
"aten::_convolution(Tensor input, Tensor weight, Tensor? bias, int[] stride, int[] padding, int[] dilation, bool transposed, int[] output_padding, int groups, bool benchmark, bool deterministic, bool cudnn_enabled, bool allow_tf32) -> Tensor",
143+
"aten::_convolution.deprecated(Tensor input, Tensor weight, Tensor? bias, int[] stride, int[] padding, int[] dilation, bool transposed, int[] output_padding, int groups, bool benchmark, bool deterministic, bool cudnn_enabled) -> Tensor",
144+
"aten::conv_transpose1d(Tensor input, Tensor weight, Tensor? bias=None, int[1] stride=1, int[1] padding=0, int[1] output_padding=0, int groups=1, int[1] dilation=1) -> Tensor",
145+
"aten::conv_transpose2d.input(Tensor input, Tensor weight, Tensor? bias=None, int[2] stride=1, int[2] padding=0, int[2] output_padding=0, int groups=1, int[2] dilation=1) -> Tensor",
146+
"aten::conv_transpose3d.input(Tensor input, Tensor weight, Tensor? bias=None, int[3] stride=1, int[3] padding=0, int[3] output_padding=0, int groups=1, int[3] dilation=1) -> Tensor",
147+
"aten::log_softmax.int(Tensor self, int dim, ScalarType? dtype=None) -> Tensor",
148+
"aten::cross_entropy_loss(Tensor self, Tensor target, Tensor? weight=None, int reduction=Mean, int ignore_index=-100) -> Tensor",
149+
"aten::log_softmax.Dimname(Tensor self, Dimname dim, *, ScalarType? dtype=None) -> Tensor",
150+
"aten::softmax.int(Tensor self, int dim, ScalarType? dtype=None) -> Tensor",
151+
"aten::softmax.Dimname(Tensor self, Dimname dim, *, ScalarType? dtype=None) -> Tensor",
152+
"aten::contiguous(Tensor(a) self, *, MemoryFormat memory_format=contiguous_format) -> Tensor(a)",
153+
"aten::flatten.using_ints(Tensor(a) self, int start_dim=0, int end_dim=-1) -> Tensor(a)",
154+
"aten::dropout(Tensor input, float p, bool train) -> Tensor",
155+
"aten::dropout_(Tensor(a!) self, float p, bool train) -> Tensor(a!)",
156+
"aten::nll_loss_nd(Tensor self, Tensor target, Tensor? weight=None, int reduction=Mean, int ignore_index=-100) -> Tensor",
157+
"aten::nll_loss(Tensor self, Tensor target, Tensor? weight=None, int reduction=Mean, int ignore_index=-100) -> Tensor",
158+
"aten::nll_loss.out(Tensor self, Tensor target, Tensor? weight=None, int reduction=Mean, int ignore_index=-100, *, Tensor(a!) out) -> Tensor(a!)",
159+
"aten::batch_norm(Tensor input, Tensor? weight, Tensor? bias, Tensor? running_mean, Tensor? running_var, bool training, float momentum, float eps, bool cudnn_enabled) -> Tensor",
160+
"aten::_batch_norm_impl_index(Tensor input, Tensor? weight, Tensor? bias, Tensor? running_mean, Tensor? running_var, bool training, float momentum, float eps, bool cudnn_enabled) -> (Tensor, Tensor, Tensor, Tensor, int)",
161+
"aten::reshape(Tensor(a) self, int[] shape) -> Tensor(a)",
162+
"aten::where.self(Tensor condition, Tensor self, Tensor other) -> Tensor",
163+
"aten::where.ScalarSelf(Tensor condition, Scalar self, Tensor other) -> Tensor",
164+
"aten::where.ScalarOther(Tensor condition, Tensor self, Scalar other) -> Tensor",
165+
"aten::where.Scalar(Tensor condition, Scalar self, Scalar other) -> Tensor",
166+
"aten::nll_loss2d(Tensor self, Tensor target, Tensor? weight=None, int reduction=Mean, int ignore_index=-100) -> Tensor",
167+
]
168+
129169
_SHALLOW_FALLBACK_TO_CPU_TENSOR_LIST = 'shallowFallbackToCPUTensorList'
130170
_SHALLOW_FALLBACK_TO_CPU_TENSOR = 'shallowFallbackToCPUTensor'
131171
_SHALLOW_UPGRADE_TO_DPCPP_TENSOR = 'shallowUpgradeToDPCPPTensor'
@@ -221,6 +261,13 @@ def is_dnnl_func(self, simple_aten_sig):
221261
return True
222262
return False
223263

264+
def is_exclude_func(self, simple_aten_sig):
265+
stripped_str = simple_aten_sig.replace(' ', '')
266+
for item in _FN_EXCLUDE_FUNCS_WITH_SIMPLE_ATEN_SIG:
267+
if stripped_str == item.replace(' ', ''):
268+
return True
269+
return False
270+
224271
def is_ipex_func(self, simple_aten_sig):
225272
stripped_str = simple_aten_sig.replace(' ', '')
226273
for item in _FN_IPEX_FUNCS_WITH_SIMPLE_ATEN_SIG:
@@ -580,6 +627,9 @@ def is_conv_overrideable_func(fname):
580627

581628
func_defs = []
582629
for cpp_sig, aten_sig, native_cpp_sig, cpp_func_sig_str, aten_func_sig_str in self._sigs:
630+
if self.is_exclude_func(aten_func_sig_str):
631+
continue
632+
583633
# The operator name should be unique because the new registration mechanism of PyTorch 1.7
584634
new_cpp_func_name = aten_sig.def_name.replace('.', '_')
585635
cpp_func_str_h, cpp_func_str_cpp = self.gen_func_signature(cpp_func_sig_str, cpp_sig.def_name, new_cpp_func_name)

0 commit comments

Comments
 (0)