Cudaを使ってシェルを起動しようとしています。次のshell.nixファイルがあります
{ pkgs ? import <nixpkgs> { } }:
pkgs.mkShell {
name = "cuda-env-shell";
buildInputs = with pkgs; [
unzip
# other packages
cudatoolkit
# other packages
binutils
];
}
ただし、次のエラーが原因で失敗します。以前は大容量ファイルを使用している間、davinci-resolveのような状況に遭遇したことがあります。 davinci-resolveの場合、私のソリューションは10個の接続を持つaxelを使用して新しいフレークを作成することで、毎回うまくいきました。今私はCudaでこの問題に直面しています。
[1/0/3 built, 4 copied (183.8/183.8 MiB), 42.8 MiB DL] building cuda_11.8.0_520.61.05_linux.run: Dload Upload Total Spent Left
error: builder for '/nix/store/idz14mzbsv4k5v5ims095jcjk2r50glr-cuda_11.8.0_520.61.05_linux.run.drv' failed with exit code 1;
last 7 log lines:
>
> trying https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
> % Total % Received % Xferd Average Speed Time Time Time Current
> Dload Upload Total Spent Left Speed
> 49 4135M 49 2044M 0 0 772k 0 1:31:20 0:45:08 0:46:12 0
> curl: (56) Recv failure: Connection reset by peer
Cudaが欲しいが、カールの代わりにaxelを使ってsrcを検索できますか?次のようなことを試しましたが、有効な構文ではないようです。
cudatoolkit.overrideAttrs
(finalAttrs: previousAttrs: {
pname = previousAttrs.pname + "-bar";
src = runCommandLocal "${previousAttrs.pname}.run" rec { } ''
axel \
--num-connections=10 \
--verbose \
--insecure \
--output $out \
"https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run"
'';
})
間違い:
at /nix/store/0g53xyh39z3y90p4d8r341wbqyjy1zhl-source/pkgs/stdenv/generic/make-derivation.nix:395:7:
394| depsHostHost = elemAt (elemAt dependencies 1) 0;
395| buildInputs = elemAt (elemAt dependencies 1) 1;
| ^
396| depsTargetTarget = elemAt (elemAt dependencies 2) 0;
error: Dependency is not of a valid type: element 13 of buildInputs for cuda-env-shell
答え1
(cudatoolkit.overrideAttrs (finalAttrs: previousAttrs: { .. }))
最初のステップでリストが壊れるのを防ぐために、式の周りに括弧を追加する必要があります。
第二段階ではoutputHash
Builderがダウンロードしたソースコードを承認できるようにします。最初は次のものを使用できます。
src = runCommandLocal "${previousAttrs.pname}.run" {
outputHashMode = "flat";
outputHashAlgo = "sha256";
outputHash = "";
}
ソースハッシュを表示するエラーをトリガーします。この場合、ハッシュ値を取得しますsha256-kiPErzrr5Ke77Zq9mxY7A6GzS4VfvCtKDRtwasCaWhY=
。
axel
最後に、コマンドが実行される環境に追加する必要があります。ソースコードのダウンロード専用なので、nativeBuildInputs
に追加してrunCommandLocal
ください。さらに。axel
${pkgs.axel}/bin/axel
{pkgs ? import <nixpkgs> {}}:
pkgs.mkShell {
name = "cuda-env-shell";
buildInputs = with pkgs; [
(cudatoolkit.overrideAttrs (finalAttrs: previousAttrs: {
pname = previousAttrs.pname;
src =
runCommandLocal "${previousAttrs.pname}.run" {
nativeBuildsInputs = [axel];
# outputHashMode = "flat";
# outputHashAlgo = "sha256";
# outputHash = "";
outputHash = "sha256-kiPErzrr5Ke77Zq9mxY7A6GzS4VfvCtKDRtwasCaWhY=";
} ''
# ${pkgs.axel}/bin/axel \
axel \
--num-connections=10 \
--verbose \
--insecure \
--output "$out" \
"https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run"
'';
}))
];
}