使用ninja包在pychon中编译c++中遇到的一些问题

本篇博客只是做个记录,如果可以帮助到您,自然是最好。

一、配置和需求

服务器配置:

系统:ubuntu22.04

显卡:4090(24G)

cuda:11.8

pytorch版本:2.0

tensorflow版本:2.12

python:3.10

个人pc配置:

系统:win11

显卡:3060

需求:在pc的pycharm上使用ssh远程连接服务器。

心得:远程连接一般不会出太大问题,但是涉及到了在pycharm中编译c++,就出现了很多问题,一些问题,在网上并没有找到答案,是自己机缘巧合解决的,因此特意写个博客,希望可以帮助更多的人,因为解决这些问题,我做在电脑面前一整天,翻遍各个网站,最后快要放弃的两分钟,解决了。

重要一点:这个服务器上的anaconda3环境是共享的,服务器上的每个用户都可以使用,我只是其中一个,所以后面涉及到给重装cuda的操作,一律放弃。

问题一、

使用pycharm远程连接服务器的时,出现了报错,我的解决问题之路开始了。

报错如下:

Couldn't refresh skeletons for remote interpreter
            failed to run generator3/__main__.py for sftp://xhangxin@192.168.5.22:22/usr/local/anaconda3/envs/score/bin/python, exit code 1, stderr: 
            -----
            Failed to process 'torchaudio.lib._torchaudio_ffmpeg' while nothing yet: [Errno 13] Permission denied: '/usr/local/anaconda3/envs/score/lib/python3.10/site-packages/torchaudio/lib/_torchaudio_ffmpeg.so'
            Traceback (most recent call last):
            File "/home/lihaiyuan/.pycharm_helpers/generator3/__main__.py", line 216, in <module>
            main()
            File "/home/lihaiyuan/.pycharm_helpers/generator3/__main__.py", line 188, in main
            generator.discover_and_process_all_modules(name_pattern=args.name_pattern,
            File "/home/lihaiyuan/.pycharm_helpers/generator3/core.py", line 440, in discover_and_process_all_modules
            self.process_module(mod.qname, mod.path)
            File "/home/lihaiyuan/.pycharm_helpers/generator3/core.py", line 514, in process_module
            status = self.reuse_or_generate_skeleton(mod_name, mod_path, sdk_skeleton_state)

解决办法:

查了很多资料,也做了很多尝试,发现下面这种解决办法是可以的

直接删除自己账户下的“.pycharm_helper”这个文件夹。这个文件夹在home路径下,但是它是隐藏的,你如果不放心直接删除会有问题,你可以把它先拷到自己u盘里,在删除。

注:我看网上有人说是python版本的问题,反正对我没用。

问题二、

因为我已经解决这个问题,当时错误信息没保存,但大概是这个错误信息

错误信息:

subprocess.CalledProcessError: Command ‘[‘ninja‘, ‘-v‘]‘ returned non-zero exit status 1

解决办法:

首先确保你已经安装了ninja这个包,如果没有安装,可以使用下面命令安装

pip install ninja -i https://pypi.tuna.tsinghua.edu.cn/simple

如果已经安装好了,可以使用ninja --version查看版本

上面报错的信息大概就是说,使用“ninja -v”查看不了你的版本

所有找到报错信息的那个文件(需要是服务器上的源文件) 好像是cpp_extension.py这个文件

把[‘ninja‘, ‘-v‘]改成[‘ninja‘, ‘--version‘]。

:如果你可以使用“ninja -v”这个命令查看到你安装的版本,这样做大概率解决不了你的问题,请自寻他法。如果你可以使用“ninja -version”,这是一个‘-’,查看版本,那你就改成这个。

网上很多人说要禁用ninja,反正我是没找到那个文件,还有人说,我这种办法不管用,但是这个确实解决了我的问题。

问题三、

解决这个问题花费了我大部分的时间

问题如下:

nvcc fatal   : Unsupported gpu architecture 'compute_89'
ninja: build stopped: subcommand failed.

这个89就是指4090的算力,需要和cuda版本匹配。cuda支持的最大算力,要大于等于89

我在网上看到的降低算力,也查了cuda11.8支持的算力,都没解决我的问题。

还有人说解决办法是降低pytorch的版本到1.5之下等等。我开头也说了服务器上是共享环境,我不能降低pytorch版本,或者更改cuda版本,这样万一出错,让别人也用不了,就更麻烦了。

解决办法如下:

/home/xx/.cache/torch_extensions/py310_cu118/fused/

找到上面路径下的build.ninja这个文件,这个文件就是编译ninja的。上面的路径,你们的不一定是这个,红色的xx代表用户名,每个人的应该不一样,自行更改。

双击打开build.ninja这个文件,

 将89改为86,你们的不一定是这个,89代表当前机器的算力,86代表你的cuda支持的算力,这也是一种变相的降低算力吧!

然后进入这个build.ninja的目录下,输入ninja重新编译,这样就好了。

这个方法不一定对你们有用,是我在做出无数次尝试后发现的。

还有一个问题就是,如果说你缺少了fused.so这种文件,你就到这个文件所在的目录,去输入ninja,重新编译一下就好了。

问题4

错误如下:

RuntimeError: Ninja is required to load C++ extensions

就是说找不到Ninja这个包,但是明明你已经安装了。

这时候去服务器上输入 which ninja,找到你的包在那

然后 ,添加环境变量。

 

 就可以了。

希望以上的内容对看到的读者,有所帮助。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WinterWanderer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值