Ninjaを使ったビルドでエラーが発生しています。
FAILED: fused.pyd "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30037\bin\Hostx64\x64/link.exe" fused_bias_act.o fused_bias_act_kernel.cuda.o /nologo /DLL c10.lib c10_cuda.lib torch_cpu.lib torch_cuda_cu.lib -INCLUDE:?searchsorted_cuda@native@at@@YA?AVTensor@2@AEBV32@0_N1@Z torch_cuda_cpp.lib -INCLUDE:?warp_size@cuda@at@@YAHXZ torch.lib /LIBPATH:C:\Users\Owner\anaconda3\envs\Python-v38\lib\site-packages\torch\lib torch_python.lib /LIBPATH:C:\Users\Owner\anaconda3\envs\Python-v38\libs "/LIBPATH:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\lib/x64" cudart.lib "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\lib/x64" /out:fused.pyd LINK : fatal error LNK1181: cannot open input file 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\lib\x64.obj' ninja: build stopped: subcommand failed.
エラー内容としてはx64.objが存在しないとゆう事なのですが
エラー文章に記載のパスのx64はそもそもファイルではなくフォルダとして存在しています。
なのでおそらくbuild.ninjaに不適切なパスの指定がされているのかと思い3日程調べているのですが、原因がわかりません
対象のbuild.ninja
ninja_required_version = 1.3 cxx = cl nvcc = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\bin\nvcc cflags = -DTORCH_EXTENSION_NAME=fused -DTORCH_API_INCLUDE_EXTENSION_H -IC:\Users\Owner\anaconda3\envs\Python-v38\lib\site-packages\torch\include -IC:\Users\Owner\anaconda3\envs\Python-v38\lib\site-packages\torch\include\torch\csrc\api\include -IC:\Users\Owner\anaconda3\envs\Python-v38\lib\site-packages\torch\include\TH -IC:\Users\Owner\anaconda3\envs\Python-v38\lib\site-packages\torch\include\THC "-IC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\include" "-IC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\include" -IC:\Users\Owner\anaconda3\envs\Python-v38\Include -D_GLIBCXX_USE_CXX11_ABI=0 /MD /wd4819 /wd4251 /wd4244 /wd4267 /wd4275 /wd4018 /wd4190 /EHsc post_cflags = cuda_cflags = -Xcudafe --diag_suppress=dll_interface_conflict_dllexport_assumed -Xcudafe --diag_suppress=dll_interface_conflict_none_assumed -Xcudafe --diag_suppress=field_without_dll_interface -Xcudafe --diag_suppress=base_class_has_different_dll_interface -Xcompiler /EHsc -Xcompiler /wd4190 -Xcompiler /wd4018 -Xcompiler /wd4275 -Xcompiler /wd4267 -Xcompiler /wd4244 -Xcompiler /wd4251 -Xcompiler /wd4819 -Xcompiler /MD -DTORCH_EXTENSION_NAME=fused -DTORCH_API_INCLUDE_EXTENSION_H -IC:\Users\Owner\anaconda3\envs\Python-v38\lib\site-packages\torch\include -IC:\Users\Owner\anaconda3\envs\Python-v38\lib\site-packages\torch\include\torch\csrc\api\include -IC:\Users\Owner\anaconda3\envs\Python-v38\lib\site-packages\torch\include\TH -IC:\Users\Owner\anaconda3\envs\Python-v38\lib\site-packages\torch\include\THC "-IC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\include" "-IC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\include" -IC:\Users\Owner\anaconda3\envs\Python-v38\Include -D_GLIBCXX_USE_CXX11_ABI=0 -D__CUDA_NO_HALF_OPERATORS__ -D__CUDA_NO_HALF_CONVERSIONS__ -D__CUDA_NO_BFLOAT16_CONVERSIONS__ -D__CUDA_NO_HALF2_OPERATORS__ --expt-relaxed-constexpr -gencode=arch=compute_75,code=compute_75 -gencode=arch=compute_75,code=sm_75 cuda_post_cflags = ldflags = /DLL c10.lib c10_cuda.lib torch_cpu.lib torch_cuda_cu.lib -INCLUDE:?searchsorted_cuda@native@at@@YA?AVTensor@2@AEBV32@0_N1@Z torch_cuda_cpp.lib -INCLUDE:?warp_size@cuda@at@@YAHXZ torch.lib /LIBPATH:C:\Users\Owner\anaconda3\envs\Python-v38\lib\site-packages\torch\lib torch_python.lib /LIBPATH:C:\Users\Owner\anaconda3\envs\Python-v38\libs "/LIBPATH:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\lib/x64" cudart.lib "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\lib/x64" rule compile command = cl /showIncludes $cflags -c $in /Fo$out $post_cflags deps = msvc rule cuda_compile depfile = $out.d deps = gcc command = $nvcc --generate-dependencies-with-compile --dependency-output $out.d $cuda_cflags -c $in -o $out $cuda_post_cflags rule link command = "C$:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30037\bin\Hostx64\x64/link.exe" $in /nologo $ldflags /out:$out build fused_bias_act.o: compile D$:\TensorSpace\AnimeGenerator\StyleGan3\alias-free-gan-pytorch-main\stylegan2\op\fused_bias_act.cpp build fused_bias_act_kernel.cuda.o: cuda_compile D$:\TensorSpace\AnimeGenerator\StyleGan3\alias-free-gan-pytorch-main\stylegan2\op\fused_bias_act_kernel.cu build fused.pyd: link fused_bias_act.o fused_bias_act_kernel.cuda.o default fused.pyd
原因となるコードはどれでしょうか?
そもそも、なぜこんなエラーが出るのか不思議だったので
一度他のcppファイルをビルドしてみたところ正常にビルドは成功しました。
試したコード:https://pytorch.org/tutorials/advanced/cpp_extension.html
読み込み方が違うため、torch関連のエラーの可能性もあるので
今回エラーをだしたcpp関連ファイルと読み込みコードを記載させていただきます
読み込み時
```ここに言語を入力
import os
from torch.utils.cpp_extension import load
module_path = os.path.dirname(file)
fused = load(
"fused",
sources=[
os.path.join(module_path, "fused_bias_act.cpp"),
os.path.join(module_path, "fused_bias_act_kernel.cu"),
],
)
fused_bias_act.cpp
#include <ATen/ATen.h>
#include <torch/extension.h>
torch::Tensor fused_bias_act_op(const torch::Tensor &input,
const torch::Tensor &bias,
const torch::Tensor &refer, int act, int grad,
float alpha, float scale);
#define CHECK_CUDA(x)
TORCH_CHECK(x.type().is_cuda(), #x " must be a CUDA tensor")
#define CHECK_CONTIGUOUS(x)
TORCH_CHECK(x.is_contiguous(), #x " must be contiguous")
#define CHECK_INPUT(x)
CHECK_CUDA(x);
CHECK_CONTIGUOUS(x)
torch::Tensor fused_bias_act(const torch::Tensor &input,
const torch::Tensor &bias,
const torch::Tensor &refer, int act, int grad,
float alpha, float scale) {
CHECK_INPUT(input);
CHECK_INPUT(bias);
at::DeviceGuard guard(input.device());
return fused_bias_act_op(input, bias, refer, act, grad, alpha, scale);
}
PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {
m.def("fused_bias_act", &fused_bias_act, "fused bias act (CUDA)");
}
fused_bias_act_kernel.cu ```ここに言語を入力 // Copyright (c) 2019, NVIDIA Corporation. All rights reserved. // // This work is made available under the Nvidia Source Code License-NC. // To view a copy of this license, visit // https://nvlabs.github.io/stylegan2/license.html #include <torch/types.h> #include <ATen/ATen.h> #include <ATen/AccumulateType.h> #include <ATen/cuda/CUDAApplyUtils.cuh> #include <ATen/cuda/CUDAContext.h> #include <cuda.h> #include <cuda_runtime.h> template <typename scalar_t> static __global__ void fused_bias_act_kernel(scalar_t *out, const scalar_t *p_x, const scalar_t *p_b, const scalar_t *p_ref, int act, int grad, scalar_t alpha, scalar_t scale, int loop_x, int size_x, int step_b, int size_b, int use_bias, int use_ref) { int xi = blockIdx.x * loop_x * blockDim.x + threadIdx.x; scalar_t zero = 0.0; for (int loop_idx = 0; loop_idx < loop_x && xi < size_x; loop_idx++, xi += blockDim.x) { scalar_t x = p_x[xi]; if (use_bias) { x += p_b[(xi / step_b) % size_b]; } scalar_t ref = use_ref ? p_ref[xi] : zero; scalar_t y; switch (act * 10 + grad) { default: case 10: y = x; break; case 11: y = x; break; case 12: y = 0.0; break; case 30: y = (x > 0.0) ? x : x * alpha; break; case 31: y = (ref > 0.0) ? x : x * alpha; break; case 32: y = 0.0; break; } out[xi] = y * scale; } } torch::Tensor fused_bias_act_op(const torch::Tensor &input, const torch::Tensor &bias, const torch::Tensor &refer, int act, int grad, float alpha, float scale) { int curDevice = -1; cudaGetDevice(&curDevice); cudaStream_t stream = at::cuda::getCurrentCUDAStream(); auto x = input.contiguous(); auto b = bias.contiguous(); auto ref = refer.contiguous(); int use_bias = b.numel() ? 1 : 0; int use_ref = ref.numel() ? 1 : 0; int size_x = x.numel(); int size_b = b.numel(); int step_b = 1; for (int i = 1 + 1; i < x.dim(); i++) { step_b *= x.size(i); } int loop_x = 4; int block_size = 4 * 32; int grid_size = (size_x - 1) / (loop_x * block_size) + 1; auto y = torch::empty_like(x); AT_DISPATCH_FLOATING_TYPES_AND_HALF( x.scalar_type(), "fused_bias_act_kernel", [&] { fused_bias_act_kernel<scalar_t><<<grid_size, block_size, 0, stream>>>( y.data_ptr<scalar_t>(), x.data_ptr<scalar_t>(), b.data_ptr<scalar_t>(), ref.data_ptr<scalar_t>(), act, grad, alpha, scale, loop_x, size_x, step_b, size_b, use_bias, use_ref); }); return y; }
読み込み時のコードを単体で実行すると、指定されたモジュールがみつかりません
とゆうエラーが出現しました。
そこでcpp_extensionのキャッシュフォルダを確認した所、ninja.buildのファイルは正常に生成されていたため、該当のディレクトリに移動し直接以下コマンドを入力した結果質問分最初のエラーLINK : fatal error LNK1181が発生致しました。
ninja
読んでいただいてありがとうございます。
回答1件
あなたの回答
tips
プレビュー