/ nix / script / exe / nvidia-wheel-extract.hs
nvidia-wheel-extract.hs
 1  {-# LANGUAGE LambdaCase #-}
 2  {-# LANGUAGE OverloadedStrings #-}
 3  
 4  {- |
 5  nvidia-wheel-extract - Extract NVIDIA libraries from PyPI wheels
 6  
 7  This script downloads and extracts NVIDIA libraries from pypi.nvidia.com
 8  wheels, which have no redistribution restrictions.
 9  
10  Usage:
11    nvidia-wheel-extract <package> <output-dir>
12    nvidia-wheel-extract all <output-dir>
13  
14  Packages:
15    nccl       - NCCL 2.28.9
16    cudnn      - cuDNN 9.17.0.29
17    tensorrt   - TensorRT 10.14.1.48
18    cutensor   - cuTensor 2.4.1
19    cusparselt - cuSPARSELt 0.8.1
20    all        - Extract all packages
21  
22  Examples:
23    nvidia-wheel-extract nccl ./nccl-sdk
24    nvidia-wheel-extract all ./nvidia-libs
25  -}
26  module Main where
27  
28  import Aleph.Script hiding (FilePath)
29  import qualified Aleph.Script.Nvidia.Versions as V
30  import qualified Aleph.Script.Nvidia.Wheel as Wheel
31  import qualified Data.Text as T
32  import System.Environment (getArgs)
33  
34  main :: IO ()
35  main = do
36      args <- getArgs
37      case args of
38          [pkg, outDir] -> script $ verbosely $ extractPackage pkg (fromText $ pack outDir)
39          _ -> printHelp
40  
41  printHelp :: IO ()
42  printHelp = do
43      putStrLn "nvidia-wheel-extract - Extract NVIDIA libraries from PyPI wheels"
44      putStrLn ""
45      putStrLn "Usage:"
46      putStrLn "  nvidia-wheel-extract <package> <output-dir>"
47      putStrLn ""
48      putStrLn "Packages:"
49      putStrLn $ "  nccl       - NCCL " ++ T.unpack V.ncclVersion
50      putStrLn $ "  cudnn      - cuDNN " ++ T.unpack V.cudnnVersion
51      putStrLn $ "  tensorrt   - TensorRT " ++ T.unpack V.tensorrtVersion
52      putStrLn $ "  cutensor   - cuTensor " ++ T.unpack V.cutensorVersion
53      putStrLn $ "  cusparselt - cuSPARSELt " ++ T.unpack V.cusparseltVersion
54      putStrLn "  all        - Extract all packages"
55      putStrLn ""
56      putStrLn "Examples:"
57      putStrLn "  nvidia-wheel-extract nccl ./nccl-sdk"
58      putStrLn "  nvidia-wheel-extract all ./nvidia-libs"
59  
60  extractPackage :: String -> FilePath -> Sh ()
61  extractPackage pkg outDir = case pkg of
62      "nccl" -> extractOne Wheel.nccl outDir
63      "cudnn" -> extractOne Wheel.cudnn outDir
64      "tensorrt" -> extractOne Wheel.tensorrt outDir
65      "cutensor" -> extractOne Wheel.cutensor outDir
66      "cusparselt" -> extractOne Wheel.cusparselt outDir
67      "all" -> Wheel.extractAllWheels V.currentPlatform outDir
68      _ -> do
69          echoErr $ "Unknown package: " <> pack pkg
70          echoErr "Use one of: nccl, cudnn, tensorrt, cutensor, cusparselt, all"
71          exit 1
72  
73  extractOne :: Wheel.WheelDef -> FilePath -> Sh ()
74  extractOne def outDir =
75      case Wheel.forPlatform V.currentPlatform def of
76          Just spec -> do
77              mkdirP outDir
78              Wheel.extractToNixLayout spec outDir
79              echoErr $ ":: Done! Extracted to " <> toTextIgnore outDir
80          Nothing -> do
81              echoErr $ ":: Error: " <> Wheel.defName def <> " not available for this platform"
82              exit 1