Closed5
tiny-cuda-nnのビルド
pip install git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch
がコケるが何故かわからない。仕方ないので、適当に build
ディレクトリを切って手動でビルドしてみる。
tiny-cuda-nnをビルドする
> mkdir build
> cd build
> git clone --recursive https://github.com/NVlabs/tiny-cuda-nn
> cd tiny-cuda-nn
README.mdに従ってビルドする。
> cmake . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo
> cmake --build build --config RelWithDebInfo -j
ここまではOK
Pythonパッケージをインストールする → 失敗
> cd bindings\torch
> python .\setup.py install
とすると、失敗する。どうやらtorch extensionのビルドに失敗している様子。
エラーをよくよく読むと、 tinycudann/bindings.obj
なるファイルを作るのに失敗しているらしい。
原因は ATen/ops/_fake_quantize_per_tensor_affine_cachemask_tensor_qparams_ops.h
が見つからないことのようである。
fatal error C1083: include ファイルを開けません。'ATen/ops/_fake_quantize_per_tensor_affine_cachemask_tensor_qparams_ops.h':No such file or directory
そこで、本当にファイルがないのか調べてみる。予想では、こいつを直接includeしているヘッダファイル、ATen/ops/_fake_quantize_per_tensor_affine_cachemask_tensor_qparams.h
と同じディレクトリにあるはず。
> Get-Item C:\Users\xx\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\Local\pypoetry\Cache\virtualenvs\prj-three-xFU4PNAC-py3.10\lib\site-packages\torch\include\ATen/ops/_fake_quantize_per_tensor_affine_cachemask_tensor_qparams_ops.h
ディレクトリ: C:\Users\xx\AppData\Local\Packages\Pyth
onSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\Loca
lCache\Local\pypoetry\Cache\virtualenvs\prj-three-x
FU4PNAC-py3.10\lib\site-packages\torch\include\ATen
\ops
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2023/12/19 1:25 3071 _fake_quantize_per_tensor_affine_cachemask_tensor_qparams_ops.h
原因の仮説と検証
- インクルードパスが間違っている説
これは完全にありえない。なぜなら、このエラーを起こしているファイルは存在しないとされるファイルと同じディレクトリにあり、かつそのファイルは同じ方法で(つまり、#include "path/to/source.h"
ではなく#include <path/to/header.h>
形式で)includeできているからだ。 - パスが長すぎる説
これはWindowsを使っていると稀に遭遇するエラーである。しかし、このコマンドを叩いていたシステムでは長いパスを許可しているし、少し考えにくい。また、このファイルをincludeしているファイルは_fake_quantize_per_tensor_affine_cachemask_tensor_qparams.h
であり、このファイルのパスの長さは258文字であった。4文字足しても262文字にしかならず、この間に閾値があるとは考えにくい。そもそも、_fake_quantize_per_tensor_affine_cachemask_tensor_qparams.h
へのパスの時点で短いパスの長さ制限である256文字は超えている。
→ 多分これだ。パスの最大長の制限によると、256文字の制限はドライブ文字を除いた部分の話のようである。つまり、終端NULL文字を除いた259文字が実際のパスの長さの制限となる。よって、258文字はギリギリセーフで、262文字はギリギリアウトであった。謎は、LongPathsEnabled
を既に1にしていることである。ずっと前に設定しているし、設定して以降何度も再起動を経験しているため、long pathsが有効になっていないとは考えにくい。cl.exe
が long pathsに対応していないとすると、これは手元での解決が著しく難しいということになる。
ところで、poetryの仮想環境のパスを変えることはできないのだろうか?
> poetry config --list
cache-dir = "C:\\Users\\xx\\AppData\\Local\\pypoetry\\Cache"
experimental.new-installer = true
experimental.system-git-client = false
installer.max-workers = null
installer.modern-installation = true
installer.no-binary = null
installer.parallel = true
virtualenvs.create = true
virtualenvs.in-project = null
virtualenvs.options.always-copy = false
virtualenvs.options.no-pip = false
virtualenvs.options.no-setuptools = false
virtualenvs.options.system-site-packages = false
virtualenvs.path = "{cache-dir}\\virtualenvs" # C:\Users\xx\AppData\Local\pypoetry\Cache\virtualenvs
virtualenvs.prefer-active-python = false
virtualenvs.prompt = "{project_name}-py{python_version}"
なるほど、virtualenvs.path
を変更すればよさそう。
> mkdir ~/.vv
> poetry config virtualenvs.path "C:\\Users\\xx\\.vv"
既存の仮想環境を消す。
> rm -re -fo C:\Users\xx\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\Local\pypoetry\Cache\virtualenvs\prj-three-xFU4PNAC-py3.10\
適当なコマンドを打って再度仮想環境を作れば、より短いパスになるはずだ。
この状態で、再度
> pip install git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch
とすると、インストールに成功した。
このスクラップは2023/12/19にクローズされました