cuda附加到python进程(vscode)
1、问题:Please try running echo 0 | sudo tee /proc/sys/kernel/yama/-ptrace_scope
/proc/sys/kernel/yama/ptrace_scope 设置不当,其控制着 ptrace 操作的允许范围。如果此文件设置为非零值,它将限制用户附加到其他进程的能力。
检查 /proc/sys/kernel/yama/ptrace_scope 设置
使用以下命令检查此文件的值:
cat /proc/sys/kernel/yama/ptrace_scope
如果值为非零,请将其设置为 0 以允许附加到所有进程:
sudo sysctl -w kernel.yama.ptrace_scope=0
2、launch.json配置:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
//使用这个需要现在命令行启动python
"name": "CUDA C++: Attach",
"type": "cuda-gdb",
"request": "attach",
"program": "/home/erge/python/venv/splatam/bin/python3.10",
"processId": "${command:cuda.pickProcess}"
},
{
"name": "Python 调试程序: 当前文件",
"type": "debugpy",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"justMyCode": false,
"args": [
// "configs/replica/splatam.py"
],
"env": {
"CUDA_VISIBLE_DEVICES": "0"
}
},
//这个可以直接使用
{
"name": "(cuda) launch",
"type": "cuda-gdb",
"request": "launch",
"program": "/home/erge/python/venv/splatam/bin/python3.10",
"args": "${workspaceFolder}/scripts/splatam.py",
"initCommands": ["cd ${workspaceFolder}",
"add-symbol-file diff-gaussian-rasterization-w-depth/build/lib.linux-x86_64-cpython-310/diff_gaussian_rasterization/_C.cpython-310-x86_64-linux-gnu.so"],
"stopAtEntry": true
},
]
}
3、需要调试的cuda文件路径不允许存在中文,cuda-gdb会把中文转成数字,然后按数字去找文件,导致文件找不到。我安装的是ubuntu中文版,然后桌面路径默认是中文的,导致无法找到对应文件
4、setup.py设置,需要禁止优化,以diff-gaussian-rasterization-w-depth为例:
需要把:
# setup(
# name="diff_gaussian_rasterization",
# packages=['diff_gaussian_rasterization'],
# ext_modules=[
# CUDAExtension(
# name="diff_gaussian_rasterization._C",
# sources=[
# "cuda_rasterizer/rasterizer_impl.cu",
# "cuda_rasterizer/forward.cu",
# "cuda_rasterizer/backward.cu",
# "rasterize_points.cu",
# "ext.cpp"],
# extra_compile_args={"nvcc": ["-I" + os.path.join(os.path.dirname(os.path.abspath(__file__)), "third_party/glm/")]})
# ],
# cmdclass={
# 'build_ext': BuildExtension
# }
# )
改为:
# 获取当前文件所在目录
current_dir = os.path.dirname(os.path.abspath(__file__))
setup(
name="diff_gaussian_rasterization",
packages=['diff_gaussian_rasterization'],
ext_modules=[
CUDAExtension(
name="diff_gaussian_rasterization._C",
sources=[
"cuda_rasterizer/rasterizer_impl.cu",
"cuda_rasterizer/forward.cu",
"cuda_rasterizer/backward.cu",
"rasterize_points.cu",
"ext.cpp"
],
extra_compile_args={
"cxx": ["-g", "-O0"], # 对于 C++ 文件启用调试模式
"nvcc": [
"-I" + os.path.join(current_dir, "third_party/glm/"),
"-g", # 启用调试信息
"-G", # 启用完整的调试符号(可选)
"-O0" # 禁用优化
]
}
)
],
cmdclass={
'build_ext': BuildExtension
}
)
4、CMakeLists.txt的配置:
setup.py 和 CMakeLists.txt 是两种不同的构建系统配置文件,通常用于不同目的和工具链。在某些情况下,Python 包的构建过程中可能结合使用 setup.py 和 CMake。可以选择通过 setup.py 调用 CMake 来处理这些复杂项目的构建,因此最好把cmake也设置成debug模式:set(CMAKE_BUILD_TYPE “Debug”)
在diff-gaussian-rasterization-w-depth中应该只是使用setup.py编译,可能不需要设置cmake。