VScode 里面使用 python 去直接调用 CUDA

上一个 帖子主要分享了如何 去将 C++ 程序 打包成一个package。 我们最后的 目的实际上是想把 CUDA 的程序 打包成 一个 Package , C++ 程序只是起到了桥梁的作用

首先:CUDA 程序 和 C++ 的程序一样, 都有一个 .cu 的源文件和 一个 .h 的头文件 。

我们的文件 包含 Cpp 文件组成,负责当作 CUDA 和 Python 的桥梁。 还有 对应的 CUDA 的源代码文件和 头文件。将这个cpp 文件命名成 ext.cpp.

cpp 复制代码
#include <torch/extension.h>
#include "interpolation_kernel.h"  ## CUDA 的头文件

PYBIND11_MODULE(TORCH_EXTENSION_NAME,m){
    m.def("trilinear_interpolation",&trilinear_interpolation);
}

cpp_properities.json 配置文件

bash 复制代码
{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "/home/smiao/anaconda3/envs/Gen_3DGS/lib/python3.8",
                "/home/smiao/anaconda3/envs/Gen_3DGS/lib/python3.8/site-packages/torch/include/",
                "/home/smiao/anaconda3/envs/Gen_3DGS/lib/python3.8/site-packages/torch/include/torch/csrc/api/include/"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c17",
            "cppStandard": "gnu++14",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4

CUDA 部分:

CUDA 的头文件 *** interpolation_kernel.h ***

cpp 复制代码
#include <torch/extension.h>

#define CHECK_CUDA(x) TORCH_CHECK(x.is_cuda(), #x "must be a CUDA tensor")
#define CHECK_CONTIGUOUS(x) TORCH_CHECK(x.is_contiguous(), #x " must be contiguous")
#define CHECK_INPUT(x) CHECK_CUDA(x); CHECK_CONTIGUOUS(x)

torch::Tensor trilinear_interpolation(torch::Tensor feats, torch::Tensor point);

对应的 源代码 文件*** interpolation_kernel.cu ***

include 的 头文件 和源代码文件 尽量放在同一级的 目录

cpp 复制代码
#include <torch/extension.h>
#include "interpolation_kernel.h"

torch::Tensor trilinear_interpolation(torch::Tensor feats, torch::Tensor points){
    CHECK_CUDA(feats);
    CHECK_CUDA(points);

    return feats;
}

配置文件 setup.py 部分:

配置文件的 包含 ** *.cpp 文件 和 *.cu 文件 **

其他的部分应该 尽量不去改变。

python 复制代码
from setuptools import setup
from torch.utils.cpp_extension import CUDAExtension, BuildExtension
import os
import glob

os.path.dirname(os.path.abspath(__file__))

setup(
    name="cuda_tutorial",
    version='1.0',
    ext_modules=[
        CUDAExtension(
            name='cuda_tutorial',
            sources=["interpolation_kernel.cu","ext.cpp"], 
              extra_compile_args={'cxx': ['-O2'],
                                'nvcc': ['-O2']}
        )
    ],
    cmdclass={
        'build_ext': BuildExtension
    }
)

最后是安装

pip install .

相关推荐
小二·1 分钟前
Python Web 开发进阶实战:AI 伦理审计平台 —— 在 Flask + Vue 中构建算法偏见检测与公平性评估系统
前端·人工智能·python
changzehai14 分钟前
Rust + VSCode + probe-rs搭建stm32-rs嵌入式开发调试环境
vscode·后端·stm32·rust·嵌入式·probe-rs
华研前沿标杆游学14 分钟前
2026年商汤科技参访深度解析人工智能发展
python
知数SEO16 分钟前
Centos如何安装高版本Python
linux·python·centos
试剂小课堂 Pro16 分钟前
mPEG-Silane:mPEG链单端接三乙氧基硅的亲水性硅烷偶联剂
java·c语言·网络·c++·python·tomcat
踏歌~26 分钟前
终极指南:在 Windows 上配置 KDB+, JupyterQ 与 Python (embedPy)
开发语言·windows·python
screenCui27 分钟前
算力市场JupyterLab简要使用命令
python
小二·36 分钟前
Python Web 开发进阶实战:边缘智能网关 —— 在 Flask + MicroPython 中构建轻量级 IoT 边缘推理平台
前端·python·flask
喵手1 小时前
Python爬虫零基础入门【第六章:增量、去重、断点续爬·第2节】断点续爬:失败队列、重放、任务状态!
爬虫·python·python爬虫实战·python爬虫工程化实战·python爬虫零基础入门·增量、去重、断点续爬·断点续爬
轻竹办公PPT1 小时前
2026 年 AI PPT 工具市场观察:国产工具与海外竞品的本土化对决,谁更懂中文职场
人工智能·python·powerpoint