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
빌더가 다운로드한 소스 코드를 승인할 수 있도록 합니다. 처음에는 다음을 사용할 수 있습니다.
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"
'';
}))
];
}