“Ninja is required to load C++ extensions”解决方案

这篇具有很好参考价值的文章主要介绍了“Ninja is required to load C++ extensions”解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题描述

Ninja is required to load C++ extensions

在跑一份代码时,由于该代码中需要调用 torch/utils/cpp_extension.py 文件,而此时又未安装ninja库,所以会出现如下错误:

RuntimeError: Ninja is required to load C++ extensions

此时问题只在于未安装ninja库,解决方法如下:

pip install ninja

PS 什么是Ninja?

在传统的 C/C++ 等项目构建时,通常会采用 make 系统使用 Makefile 文件来进行整个项目的编译构建,通过 Makefile 中指定的编译所依赖的规则使得程序的构建非常简单,并且在复杂项目中可以避免由于少部分源码修改而造成的很多不必要的重编译。但是它仍然不够好,因为其大而且复杂,有时候我们并不需要 make 那么强大的功能,相反我们需要更灵活,速度更快的编译工具。Ninja 作为一个新型的编译工具,小巧而又高效,它就是为此而生

也就是说,Ninja 是一个构建系统,与 Make 类似,但是其最为重要的一个优点就是它的灵活性与高效性,能够实现一些必要的功能而不臃肿。

Your compiler (c++) is not compatible with the compiler Pytorch was built with for this platform, which is g++ on linux

当安装了ninja库后,会发现又有新的问题出现,具体问题如下:
“Ninja is required to load C++ extensions”解决方案
正如上图所示,服务器默认使用的编译器为c++,而Pytorch使用的是g++编译器,此时无法通过服务器上的c++ compiler去编译Pytorch中的cpp extension,所以会出现warning,并无法进行后续的操作。

解决方法

首先进行问题的分析,发现其实只要让服务器使用g++去进行Pytorch的编译就不会报错了。而要使用g++,首先需要判断服务器中是否安装,故可以使用 whereis 命令去查找,效果如下:
“Ninja is required to load C++ extensions”解决方案
可以发现,服务器中包含g++以及c++,只是默认会使用c++ compiler,所以会和Pytorch的编译工具产生冲突,故目前只需要在当前用户下修改服务器的默认c++编译器,就能解决该问题,具体解决方法如下:可以在bash下输入该指令,这表明当前连接退出后就失效,也可以将其写入.bashrc文件中,这样就能永久生效。

export CXX=g++

该方法是将当前用户环境变量中所有符合CXX(XX表示任意字符)模式的字符替换成g++,所以c++也会被替换成g++,故能有效解决该编译器冲突问题。

PS Linux中export命令详解

export命令的功能为设置或显示环境变量。具体的细节可以参考该博客

参考链接

g++/c++ compiler incompatibility · Issue #974 · NVIDIA/apex (github.com)

如何查看Linux是否安装了gcc和gcc-c++ - 关键步就几步 - 博客园 (cnblogs.com)

使用 Ninja 代替 make - 简书 (jianshu.com)文章来源地址https://www.toymoban.com/news/detail-425419.html

到了这里,关于“Ninja is required to load C++ extensions”解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包