🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

Q&A

1回答

2274閲覧

WindowsでM2Detを動かそうとしているのですが、コンパイルがでなくて止まっています。

shosin__

総合スコア6

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

コンパイル

コンパイルとは、プログラミング言語のテキストソース(ソースコード)をコンピュータ上で実行可能な形式(オブジェクトコード)に変換することをいいます

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

0グッド

0クリップ

投稿2020/12/19 15:57

編集2020/12/20 13:32

M2DetをWindowsで実装しようと思い、サイトを参考にやっていたのですが、最後のコンパイルでエラーが出て、原因が分からず困っています。

環境
anaconda
python3.7
cuda10.0
(何を書けばいいかわからなかったのでとりあえずこれだけ書いてますが、他に知りたいバージョンあればコメントしてください)

やったこと
python setup.py build_ext --inplace
python setup_cuda.py build_ext --inplace

この二つを実行して、それぞれ
running build_ext
error: each element of 'ext_modules' option must be an Extension instance or 2-tuple

"setup_cuda.py", line 79, in spawn
os.path.dirname(find_executable("cl.exe", PATH))
~\ntpath.py", line 221, in dirname
return split(p)[0]
~\ntpath.py", line 183, in split
p = os.fspath(p)
TypeError: expected str, bytes or os.PathLike object, not NoneType

というエラーが出ました。
初心者なので、できるだけわかりやすく教えていただけると幸いです。

参考コードのURL
https://github.com/qijiezhao/M2Det

変更箇所
・setup.py
61行目を変更
変更前:for k, v in cudaconfig.iteritems():
変更後:for k, v in cudaconfig.items():

 128~136行目をコメントアウト

・setup_cuda.py
61行目を変更
変更前:nvcc_compile_args = ['-O', '--ptxas-options=-v', '-arch=sm_35', '-c', '--compiler-options=-fPIC']
変更後:nvcc_compile_args = ['-O2', '--ptxas-options=-v', '-arch=sm_35', '-c', '--compiler-options=-fPIC']

 100行目と101行目の間に以下を追記
#Remove ',ID=2'
elif ',ID=2' in c: cmd[idx] = c[0:len(c)-5]

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/12/19 19:01

ちゃんとコードを提示しましょう
jbpb0

2020/12/19 22:30 編集

https://github.com/srpkdyy/M2Det-windows は、Windows向けの修正済みのようなので、こちらを使ってみてください 先に紹介したブログの、(3)(4)を行った後の状態のようです
shosin__

2020/12/19 22:32

もう一つのコードが文字制限で貼れませんでした。 どうすればいいでしょうか?
jbpb0

2020/12/19 22:39

参考にされてるところと、私が紹介したブログは、内容はほぼ同じです setup_cuda.py の修正する行番号が違いますが、修正内容は同じなので、修正前のコードのバージョンが違うのかな、と想像します
jbpb0

2020/12/19 22:47

setup.pyとsetup_cuda.pyは、元のコードのgithubのURL(アドレス)を書けば、ここの質問に貼るのは、自分で修正したところだけ抜き出して貼ればいいです 抜き出したのが何行目かも分かるように書いてください
jbpb0

2020/12/19 23:06

https://github.com/qijiezhao/M2Det に「the supported version is pytorch-0.4.1」と書かれてるので、もしWindows向け修正済みのでもエラー出たら、pytorchのバージョンを0.4.1に変えてみてください
shosin__

2020/12/20 13:58

返信遅れてすみません!! pytorch-0.4.1にして行いましたが同じエラーが出ました。 もう一回入れなおした方がいいですかね、、、
jbpb0

2020/12/20 14:12

CのコンパイラはVisual Studioですか? もしそうなら、バージョンと種類(Expressとか)は何ですか?
shosin__

2020/12/21 02:04

使っているコンパイラはPyCharm2020.3です。
shosin__

2020/12/21 23:14

返信遅くなり申し訳ありません! CUDAのインストールの時にVCUDAのインストールの時にisualStudioがインストールされない問題があり、調べるとNVIDIA関連のものを全てアンインストールするという対策しかなく、そのリスクをできるだけ負いたくないので別の方法を探しています。 他の方法があれば教えてください!
jbpb0

2020/12/21 23:30

CUDAのコンパイルには、Visual Studioが必須です CUDAのインストール時のエラーは、下記に書いてあるように、「Visual Studio Integration」のチェックを外せば大丈夫です https://qiita.com/rhene/items/2a2eac7d1c0a8edc3ac5
shosin__

2020/12/21 23:42

この場合、visualstudioで直接CUDAを使用できなくなりませんか? 一応、その方法でCUDA10.0は入っています
jbpb0

2020/12/21 23:48

> visualstudioで直接CUDAを使用できなくなりませんか? Visual Studioはインストールしているのですか? インストールしているなら、私の > CUDAをインストールする前にVisual Studioをインストールしておく必要があります > そこは大丈夫でしょうか? に対して、「Visual Studio 20XX YYエディションをインストールしてるので、大丈夫です」みたいに回答したらいいと思うのですが
jbpb0

2020/12/21 23:53 編集

pythonでビルドする場合は、Visual Studioのコマンド(cl.exeとか)が使われるだけなので、「Visual Studio Integration」は関係ありません Visual Studioがインストール済で、64bitのプログラムがコンパイル可能な状態だと仮定して書きます pythonでビルドする際に、Visual StudioとCUDAのコマンドが実行できないといけないので、pathにそれらが入っている必要がありますけど、そこは大丈夫でしょうか?
shosin__

2020/12/22 00:13 編集

そーなんですね! そこでVisualStudioが使えないと勘違いしていました! パスを通すのは、Windowsの環境変数設定画面で、CUDAのパス(C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin)を新規で追加するといいんですか?(そのレベルの超初心者ですみません!) そのパスは通しています。
jbpb0

2020/12/22 04:41 編集

pythonでビルドしようとしている状態で、 https://qiita.com/wazakkyd/items/ab79920b22b24b385487 の「Sampleコードの実行」のCUDAのソースをコンパイルして実行することはできますか? Visual Studioをインストールしたら、WindowsのメニューにVisual Studio用のコマンドプロンプトを起動する項目が作られますが、そちらで作業するのではなく、pythonでビルドしたい状態(pythonが普通に使える状態)で作業してください その状態でCUDAのプログラムがコンパイルできるように設定しておかないと、ビルドできません Visual Studioのコマンドを使うには、環境変数をいくつか設定したり、いろいろやることがありますので、CUDA用のpath設定だけでは使えないはずです
jbpb0

2020/12/22 04:41

もし、Visual Studio用のコマンドプロンプトでもpythonを普通に使えるのなら、そちらを使うのでもいいです それが可能なら、設定はそちらの方が簡単です pythonが使えて、Visual Studioも使える、という状態を作らないと、ビルドできません そのためには、下記のどちらかをやります ・普段pythonを実行している環境で、Visual Studioのコマンドが使えるように設定を追加する ・Visual Studioのコマンドが使える状態(Visual Studio用コマンドプロンプト)で、pythonが使えるように設定する もしかしたら、何もしなくても、現状で後者になっているかもしれません それなら、それが簡単です
shosin__

2020/12/22 07:34

>「Sampleコードの実行」のCUDAのソースをコンパイルして実行することはできますか? nvccは実行できたのですがCUDA Samplesの中身がなく、サンプルが実行できませんでした。これは失敗してますか? visualstudioのコマンドプロンプトでpythonと打つと、マイクロソフトストアが開きpythonをインストールするよう促されます。これはpythonが使える状態でないという解釈で大丈夫ですか? この場合どう言った手順で使えるようにすればよろしいでしょうか?
jbpb0

2020/12/22 07:53 編集

> nvccは実行できたのですがCUDA Samplesの中身がなく、サンプルが実行できませんでした。 念の為に、手順を確認します https://qiita.com/wazakkyd/items/ab79920b22b24b385487 の「Sampleコードの実行」の「コードはこちら」の下に書かれてるのを「cudasample01.cu」という名前のテキストファイルに書いて保存してから、そのファイルが置かれているフォルダにコマンドプロンプトで cd して、 nvcc cudasample01.cu としたのですよね? (拡張子が .cu なら、ファイル名は違ってても大丈夫ですが) 手順が上記通りで、正常にコンパイルできたら、何かファイルができてます 上記ページでは拡張子が .exp のファイルができると書かれてますけど、おぼろげな記憶では .exe ができたような気もします (最近CUDAでプログラム書いてないのでおぼえてない) それらしきものができてない、ということなら、CUDAのコンパイルができる状態にはなってないので、ビルドは当然できません
jbpb0

2020/12/22 07:55 編集

下記を教えてください ・pythonは何を使っているのか? 公式版? Anaconda? それ以外? 【追記】Anacondaって書いてありました ・Visual Studio のバージョン(2019とか)とエディション(Communityとか)
shosin__

2020/12/22 08:08

pythonはanacondaです visualstudioは2017 Community です!
jbpb0

2020/12/22 08:35

AnacondaプロンプトでVisual Studioのコマンドを使えるようにする手順を書きます ただし、Visual Studioのバージョンによって多少メニューのショートカット名等が違うかもしれないので、ピッタリ同じものがなくても、適宜探してください あと、手順を間違えたり、重要な設定を誤って書き換えたりしないように、おちついて慎重に作業してください Windowsのメニューで、お使いのVisual Studioの、64bit用のコマンドプロンプトを起動するメニュー項目を探します (探すだけで、起動はしません) たぶん、「VS 2017 用 x64 Native Tools コマンド プロンプト」みたいな名前だと思います 見つかったら、マウスの「右クリック」→「その他」→「ファイルの場所を開く」を実行してください そうしたら、メニューのショートカットがあるフォルダが開きます そのフォルダから、該当するメニュー項目(上記で探したもの)を選んで「右クリック」→「プロパティ」→「ショートカット」→「リンク先」の内容を、新しいテキストファイルにコピペして保存してください (くれぐれも、「プロパティ」の「リンク先」の内容を変更したりしないように、注意してください) テキストファイルにコピペしたら、「プロパティ」は閉じてください テキストファイルにコピペした「リンク先」の内容は、たぶん下記のようなものだと思います %comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio\2017\WDExpress\VC\Auxiliary\Build\vcvars64.bat" 上記から先頭の「%comspec% /k」は不要なので、テキストファイルでは削除してください 残った「"C:\Program Files...bat"」の部分を、全部そのままAnacondaプロンプトで実行してください (最初と最後の「"」も含めて) 手順を間違えてなければ、これでAnacondaプロンプトでVisual Studioのコマンドが実行できるようになったはずなので、CUDAのサンプルをコンパイルしてみてください なお、Anacondaプロンプトを起動し直したら、設定は消えてしまうので、「"C:\Program Files...bat"」は必要な時に都度実行する必要がありますので、それを書いたテキストファイルは捨てずに残しておいてください (もちろん、普段pythonを使うときは設定は不要で、何かをビルドするとかインストールするときにしか設定する必要はありませんけど)
shosin__

2020/12/22 10:26

nvcc cudasample01.cuを行った結果、 cudasample01.cu c1xx: fatal error C1083: ソース ファイルを開けません。'cudasample01.cu':No such file or directory といったエラーがでてコンパイルできません。 コードを描く方法が間違っているのでしょうか?
jbpb0

2020/12/22 10:30

No such file or directory だから、ファイル名が違うか、そのファイルを置いてる場所に cd できてないか、ではないですか? nvcc する前に、dir でファイルがあるか確認してください
jbpb0

2020/12/22 10:39

nvccがうまくいかなければ、 https://www.javadrive.jp/cstart/install/index5.html の「C言語のサンプルプログラムをコンパイルする」の「sample.c」を作成して、Anacondaプロンプトで「sample.c」があるフォルダに cd してから、 cl sample.c を実行してみてください 正常にコンパイルできたら .exe ファイルが作成されるので、実行してみてください Anacondaプロンプトは、当然、Visual Studioコマンドが実行できる状態に予めしておかないといけません
shosin__

2020/12/22 10:51

名前が間違えていました!すみません! 結果 76 errors detected in the compilation of "C:/Users/XX/x/Local/Temp/tmpxft_0000509c_00000000-12_cudasample01.cpp1.ii". このようなエラーが出ました
shosin__

2020/12/22 10:53

C言語のサンプルでは成功しました!
jbpb0

2020/12/22 11:05

念の為に、コンパイルしてできた .exe を調べてみてください dumpbin /HEADERS sample.exe とやると、ずらーっといろいろ表示されます その先頭の方に、 FILE HEADER VALUES 数字 machine (x64) みたいな行がありますけど、そこに上記のように(x64)と書かれてますでしょうか? それとも、(x86)と書かれてますでしょうか?
shosin__

2020/12/22 11:09

x86と書いてあります
jbpb0

2020/12/22 11:35 編集

あれれ、それだと設定が間違ってます たぶん、プロパティを見たショートカットが、32bit用のを見てしまったのだと思います テキストファイルにコピペしたのを、ここに書いてください (「"C:\Program Files...bat"」を全部) そこ直さないと、CUDAのコンパイルはできません (CUDAは64bitのみ対応なので)
jbpb0

2020/12/22 11:35

テキストファイルにコピペしたのをAnacondaプロンプトで実行したとき、正しい場合は下記のどちらかが最後に表示されます Environment initialized for: 'x86_x64' Environment initialized for: 'x64' もし下記が表示されたら、間違ってます Environment initialized for: 'x86'
shosin__

2020/12/22 12:23 編集

x64が出ました! コピーするパスが間違えていました。
jbpb0

2020/12/22 14:24

dumpbin /HEADERS sample.exe で(x64)と表示されたなら、今度こそはCUDAプログラムのコンパイルができるのでは??
shosin__

2020/12/23 00:11

返信遅れてすみません。 コンパイルに成功しました! これはx86、x64のビット数??が合わないとコンパイルできないという認識でいいんですか?
jbpb0

2020/12/23 00:56

CUDAと無関係に一般的な話として、Windowsの.exeには32bit(x86)と64bit(x64)の2種類があり、コンパイルするときにどちらを作るかを決めます Visual Studioだと、テキストファイルにコピペした.batファイルを実行するときに、それがどちらになるのかが決まります CUDAでコンパイルしたら、CPUとGPUが連動して動く.exeが作成されます コンパイルにあたり、CPU部分はVisual Studioが、GPU部分はCUDAツールキットが、それぞれ担当して、最終的にそれらが合体して.exeが作られます 以前はCUDAも32bitと64bitの両方をサポートしていたのですが、現在のバージョンは64bitのみのサポートですから、CUDAツールキットでコンパイルしたもの(GPU側)は64bit.exe用のものです それと合体させるVisual StudioでコンパイルしたCPU側のも同じ64bitじゃないと、合体させることができません なので、Visual Studioを64bit.exeを作れる状態にしないと、CUDAのプログラムから.exeを作れないのです
jbpb0

2020/12/23 01:07

現状で、C++とCUDAで64bit用のコンパイルができる環境が整ったはずなので、M2Detがビルドできるのではないですかね??
guest

回答1

0

pythonが使えて、Visual Studioも使える(cudaのコンパイルができる)、という状態を作らないと、ビルドできません
そのためには、下記のどちらかをやります
・普段pythonを実行している環境で、Visual Studioのコマンドが使えるように設定を追加する
・Visual Studioのコマンドが使える状態(Visual Studio用コマンドプロンプト)で、pythonが使えるように設定する

Visual Studioを使いコマンドラインからC/C++のプログラムをコンパイルする
の「C言語のサンプルプログラムをコンパイルする」のコードのコンパイルと実行ができれば、Visual Studioは大丈夫です

CUDA 7.5 をWindows10にインストールし、Sampleコードを実行するまで
の「Sampleコードの実行」のコードのコンパイルと実行ができれば、cudaも大丈夫です

投稿2022/09/14 02:03

jbpb0

総合スコア7653

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問