Closed5

tiny-cuda-nnのビルド

FrodoFrodo

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

FrodoFrodo

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

なるほど、存在はするようだ。要するにこういうことですね):

FrodoFrodo

原因の仮説と検証

  1. インクルードパスが間違っている説
    これは完全にありえない。なぜなら、このエラーを起こしているファイルは存在しないとされるファイルと同じディレクトリにあり、かつそのファイルは同じ方法で(つまり、#include "path/to/source.h"ではなく#include <path/to/header.h> 形式で)includeできているからだ。
  2. パスが長すぎる説
    これは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に対応していないとすると、これは手元での解決が著しく難しいということになる。
FrodoFrodo

ところで、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\

適当なコマンドを打って再度仮想環境を作れば、より短いパスになるはずだ。

FrodoFrodo

この状態で、再度

> pip install git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch

とすると、インストールに成功した。

このスクラップは4ヶ月前にクローズされました