這篇文章是學習時整理的一些筆記,讓自己複習時方便,文章內容是閱讀清單之整理
PyTorch, C++, CUDA Relationship
一般使用深度學習時我們會使用 PyTorch 作為深度學習的框架,但某些時候可能因為無法達到平行運算因此耗費大量時間,因次我們就可以使用C++和CUDA來擴充PyTorch。
C++可以用於擴展和使用PyTorch,同時CUDA則提供了在 GPU 上進行高效數值計算的能力。在一些性能要求較高的場景下(eg. NeRF volume rendering),C++ 和 CUDA 可以與 PyTorch 一起使用來實現更高效的訓練和推理。
從PyTorch裡使用C++ API,再透過C++來call CUDA,C++是連接PyTorch和CUDA的橋樑
Introduction
Environment
建立一個環境有 PyTorch(CUDA version), C++ compiler, CUDA Toolkit, cuDNN,當然最重要的還是要有GPU
需要自己添加一個configuration filec_cpp_properties.json
,並且新增pytorch的路徑,讓專案可以連結到pytorch的位置 (如果沒有正確抓到位置,在cpp裡 #include <torch/extension.h> 會紅底線)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| { "configurations": [ { "name": "Win32", "includePath": [ "${workspaceFolder}/**", "/home/ubuntu/anaconda3/envs/cppcuda/include/python3.8", "/home/ubuntu/anaconda3/envs/cppcuda/lib/python3.8/site-packages/torch/include", "/home/ubuntu/anaconda3/envs/cppcuda/lib/python3.8/site-packages/torch/include/torch/csrc/api/include" ], "defines": [ "_DEBUG", "UNICODE", "_UNICODE" ], "windowsSdkVersion": "10.0.19041.0", "compilerPath": "cl.exe", "cStandard": "c17", "cppStandard": "c++17", "intelliSenseMode": "windows-msvc-x64" } ], "version": 4 }
|
SetUp
假設我們要return一個function的某個參數
Write function in C++
建立一個interpolation.cpp
檔
1 2 3 4 5 6 7 8 9 10 11 12 13
| torch::Tensor trilinear_interpolation( torch::Tensor feats, torch::Tensor points ){ return feats; }
PYBIND11_MODULE(TORCH_EXTENSION_NAME, m){ m.def("trilinear_interpolation", &trilinear_interpolation);
}
|
Bind C++ by Python
除了C++檔案之外,還需要一個setup.py
檔案來把C++的程式build出來才能使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| from setuptools import setup from torch.utils.cpp_extension import CppExtension, BuildExtension
setup( name='cppcuda_tutorial', version='1.0', author='XXX', author_email='XXX@gmail.com', description='cppcuda_tutorial', long_description='cppcuda_tutorial', ext_modules=[ CppExtension( name='cppcuda_tutorial', sources=['interpolation.cpp'], ) ], cmdclass={ 'build_ext': BuildExtension } )
|
Build C++ with Python
當上面檔案都準備好了之後就可以來Build C++檔案了~
在終端機執行以下指令就會自動幫我們安裝setup.py裡的東西
Check result
Build完後,就可以來建立一個test.py
檔來測試是否能正常運行
1 2 3 4 5 6 7 8
| import torch import cppcuda_turtorial
feats = torch.ones(2) points = torch.ones(2)
out = cppcuda_turtorial.trilinear_interpolation(feats, points) print(out)
|
如果最後有成功印出來就大功告成啦!!
Reading List
這邊整理了很多很好的學習網址~
- Pytorch+cpp/cuda extension 教學 tutorial 1 - English CC -
Reference
- What is the difference between ray tracing, ray casting, ray marching and path tracing?