同步操作将从 OpenDocCN/pytorch-doc-zh 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
创建一个C++
的setuptools.Extension
。
便捷地创建一个setuptools.Extension
具有最小(但通常是足够)的参数来构建C++
扩展的方法。
所有参数都被转发给setuptools.Extension
构造函数。
例
>>> from setuptools import setup
>>> from torch.utils.cpp_extension import BuildExtension, CppExtension
>>> setup(
name='extension',
ext_modules=[
CppExtension(
name='extension',
sources=['extension.cpp'],
extra_compile_args=['-g'])),
],
cmdclass={
'build_ext': BuildExtension
})
为CUDA/C++
创建一个setuptools.Extension
。 创建一个setuptools.Extension
用于构建CUDA/C ++
扩展的最少参数(但通常是足够的)的便捷方法。这里包括CUDA
路径,库路径和运行库。 所有参数都被转发给setuptools.Extension
构造函数。
例
>>> from setuptools import setup
>>> from torch.utils.cpp_extension import BuildExtension, CppExtension
>>> setup(
name='cuda_extension',
ext_modules=[
CUDAExtension(
name='cuda_extension',
sources=['extension.cpp', 'extension_kernel.cu'],
extra_compile_args={'cxx': ['-g'],
'nvcc': ['-O2']})
],
cmdclass={
'build_ext': BuildExtension
})
自定义setuptools
构建扩展。
setuptools.build_ext
子类负责传递所需的最小编译器参数(例如-std=c++11
)以及混合的C ++/CUDA
编译(以及一般对CUDA
文件的支持)。
当使用BuildExtension
时,它将提供一个用于extra_compile_args
(不是普通列表)的词典,通过语言(cxx
或cuda
)映射到参数列表提供给编译器。这样可以在混合编译期间为C ++
和CUDA
编译器提供不同的参数。
即时加载(JIT)PyTorch C ++
扩展。
为了加载扩展,会创建一个Ninja
构建文件,该文件用于将指定的源编译为动态库。随后将该库作为模块加载到当前Python
进程中,并从该函数返回,以备使用。
默认情况下,构建文件创建的目录以及编译结果库是<tmp>/torch_extensions/<name>
,其中<tmp>
是当前平台上的临时文件夹以及<name>
为扩展名。这个位置可以通过两种方式被覆盖。首先,如果TORCH_EXTENSIONS_DIR
设置了环境变量,它将替换<tmp>/torch_extensions
并将所有扩展编译到此目录的子文件夹中。其次,如果build_directory
函数设置了参数,它也将覆盖整个路径,即,库将直接编译到该文件夹中。
要编译源文件,使用默认的系统编译器(c++),可以通过设置CXX
环境变量来覆盖它。将其他参数传递给编译过程,extra_cflags
或者extra_ldflags
可以提供。例如,要通过优化来编译您的扩展,你可以传递extra_cflags=['-O3']
,也可以使用 extra_cflags
传递进一步包含目录。
提供了混合编译的CUDA
支持。只需将CUDA
源文件(.cu
或.cuh
)与其他源一起传递即可。这些文件将被检测,并且使用nvcc
而不是C ++
编译器进行编译。包括将CUDA lib64
目录作为库目录传递并进行cudart
链接。您可以将其他参数传递给nvcc extra_cuda_cflags
,就像使用C ++
的extra_cflags
一样。使用了各种原始方法来查找CUDA
安装目录,通常情况下可以正常运行。如果不可以,最好设置CUDA_HOME
环境变量。
pybind11
模块的名字一样!C++
源文件的相对或绝对路径列表。CUDA
源时转发给nvcc
。True
,打开加载步骤的详细记录。PyTorch
扩展作为Python
模块。例
>>> from torch.utils.cpp_extension import load
>>> module = load(
name='extension',
sources=['extension.cpp', 'extension_kernel.cu'],
extra_cflags=['-O2'],
verbose=True)
获取构建C++
或CUDA
扩展所需的路径。
cuda
- 如果为 True,则包含CUDA
特定的包含路径。例如:
from setuptools import setup
from torch.utils.cpp_extension import BuildExtension, CppExtension
torch.utils.cpp_extension.include_paths(cuda=False)
# ['/usr/local/lib/python3.6/site-packages/torch/lib/include', '/usr/local/lib/python3.6/site-packages/torch/lib/include/TH', '/usr/local/lib/python3.6/site-packages/torch/lib/include/THC']
验证给定的编译器是否与PyTorch
ABI 兼容。
shell
进程中可执行。PyTorch
ABI 不兼容,则为False
,否则返回True
。如果可以在ninja上运行则返回True
。
文档地址:[torch.utils.cpp_extension
](https://ptorch.com/docs/8/torch-utils-cpp_extension)
用户名 | 头像 | 职能 | 签名 |
---|---|---|---|
Song | 翻译 | 人生总要追求点什么 |
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。