|
28 | 28 | run: make ch_defconfig |
29 | 29 | - name: Build kernel (x86-64) |
30 | 30 | run: CFLAGS="-Wa,-mx86-used-note=no" make bzImage -j `nproc` |
| 31 | + - name: Build kernel modules (x86-64) |
| 32 | + run: make modules -j `nproc` |
| 33 | + - name: Clone NVIDIA open-gpu-kernel-modules |
| 34 | + run: git clone --depth 1 --branch 570.86.16 https://github.com/NVIDIA/open-gpu-kernel-modules.git |
| 35 | + - name: Build NVIDIA modules (x86-64) |
| 36 | + run: | |
| 37 | + cd open-gpu-kernel-modules |
| 38 | + make modules KERNEL_UNAME=$(cd .. && make -s kernelrelease) SYSSRC=$(pwd)/.. -j $(nproc) |
| 39 | + - name: Download NVIDIA driver for firmware |
| 40 | + run: | |
| 41 | + DRIVER_VERSION=570.86.16 |
| 42 | + wget -q https://download.nvidia.com/XFree86/Linux-x86_64/${DRIVER_VERSION}/NVIDIA-Linux-x86_64-${DRIVER_VERSION}.run |
| 43 | + chmod +x NVIDIA-Linux-x86_64-${DRIVER_VERSION}.run |
| 44 | + ./NVIDIA-Linux-x86_64-${DRIVER_VERSION}.run --extract-only --target nvidia-driver |
| 45 | + - name: Package NVIDIA modules (x86-64) |
| 46 | + run: | |
| 47 | + KVER=$(make -s kernelrelease) |
| 48 | + DRIVER_VERSION=570.86.16 |
| 49 | + mkdir -p nvidia-modules/lib/modules/$KVER/kernel/drivers/gpu |
| 50 | + mkdir -p nvidia-modules/lib/firmware/nvidia/${DRIVER_VERSION} |
| 51 | + cp open-gpu-kernel-modules/kernel-open/*.ko nvidia-modules/lib/modules/$KVER/kernel/drivers/gpu/ |
| 52 | + cp nvidia-driver/firmware/*.bin nvidia-modules/lib/firmware/nvidia/${DRIVER_VERSION}/ |
| 53 | + tar czf nvidia-modules-x86_64.tar.gz -C nvidia-modules . |
| 54 | + # ============================================================ |
| 55 | + # NVIDIA DRIVER USERSPACE LIBRARIES |
| 56 | + # ============================================================ |
| 57 | + # These libraries are injected into containers at VM boot time by hypeman, |
| 58 | + # eliminating the need for containers to bundle matching NVIDIA drivers. |
| 59 | + # |
| 60 | + # When upgrading the driver version: |
| 61 | + # 1. Check NVIDIA release notes: https://download.nvidia.com/XFree86/Linux-x86_64/ |
| 62 | + # 2. Ensure compatibility with the kernel version being built |
| 63 | + # 3. Update DRIVER_VERSION in ALL places in this file (search for 570.86.16) |
| 64 | + # 4. Update NvidiaDriverVersion in hypeman/lib/system/versions.go |
| 65 | + # 5. Test GPU passthrough thoroughly before deploying |
| 66 | + # ============================================================ |
| 67 | + - name: Package NVIDIA driver libraries (x86-64) |
| 68 | + run: | |
| 69 | + DRIVER_VERSION=570.86.16 |
| 70 | + |
| 71 | + mkdir -p nvidia-driver-libs/usr/lib/nvidia |
| 72 | + mkdir -p nvidia-driver-libs/usr/bin |
| 73 | + |
| 74 | + # Essential libraries for CUDA inference (minimal set to keep initrd small) |
| 75 | + # libcuda.so - CUDA driver API (required for all GPU compute) ~68MB |
| 76 | + cp nvidia-driver/libcuda.so.${DRIVER_VERSION} nvidia-driver-libs/usr/lib/nvidia/ |
| 77 | + # libnvidia-ml.so - NVML for nvidia-smi and GPU monitoring ~2MB |
| 78 | + cp nvidia-driver/libnvidia-ml.so.${DRIVER_VERSION} nvidia-driver-libs/usr/lib/nvidia/ |
| 79 | + # libnvidia-ptxjitcompiler.so - PTX JIT compilation ~37MB |
| 80 | + cp nvidia-driver/libnvidia-ptxjitcompiler.so.${DRIVER_VERSION} nvidia-driver-libs/usr/lib/nvidia/ |
| 81 | + |
| 82 | + # Small utility libraries |
| 83 | + cp nvidia-driver/libnvidia-allocator.so.${DRIVER_VERSION} nvidia-driver-libs/usr/lib/nvidia/ |
| 84 | + cp nvidia-driver/libnvidia-cfg.so.${DRIVER_VERSION} nvidia-driver-libs/usr/lib/nvidia/ |
| 85 | + |
| 86 | + # Note: The following large libraries are NOT included to keep initrd small: |
| 87 | + # - libnvidia-nvvm.so (~79MB) - Only needed for CUDA runtime compilation |
| 88 | + # - libnvidia-gpucomp.so (~61MB) - Only needed for some compute workloads |
| 89 | + # - libnvidia-opencl.so (~63MB) - Only needed for OpenCL (not CUDA) |
| 90 | + # - libnvcuvid.so (~16MB) - Only needed for video decoding |
| 91 | + # - libnvidia-encode.so - Only needed for video encoding |
| 92 | + # Containers requiring these can install them directly. |
| 93 | + |
| 94 | + # Binaries |
| 95 | + cp nvidia-driver/nvidia-smi nvidia-driver-libs/usr/bin/ |
| 96 | + cp nvidia-driver/nvidia-modprobe nvidia-driver-libs/usr/bin/ |
| 97 | + |
| 98 | + # Version file for runtime verification |
| 99 | + echo "${DRIVER_VERSION}" > nvidia-driver-libs/usr/lib/nvidia/version |
| 100 | + |
| 101 | + tar czf nvidia-driver-libs-x86_64.tar.gz -C nvidia-driver-libs . |
| 102 | + |
| 103 | + echo "Driver libraries packaged:" |
| 104 | + ls -lah nvidia-driver-libs/usr/lib/nvidia/ |
| 105 | + ls -lah nvidia-driver-libs/usr/bin/ |
31 | 106 | - name: Create release |
32 | 107 | id: create_release |
33 | 108 | uses: actions/create-release@v1 |
@@ -55,6 +130,24 @@ jobs: |
55 | 130 | asset_path: vmlinux |
56 | 131 | asset_name: vmlinux-x86_64 |
57 | 132 | asset_content_type: application/octet-stream |
| 133 | + - name: Upload NVIDIA modules for x86_64 |
| 134 | + uses: actions/upload-release-asset@v1 |
| 135 | + env: |
| 136 | + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| 137 | + with: |
| 138 | + upload_url: ${{ steps.create_release.outputs.upload_url }} |
| 139 | + asset_path: nvidia-modules-x86_64.tar.gz |
| 140 | + asset_name: nvidia-modules-x86_64.tar.gz |
| 141 | + asset_content_type: application/gzip |
| 142 | + - name: Upload NVIDIA driver libraries for x86_64 |
| 143 | + uses: actions/upload-release-asset@v1 |
| 144 | + env: |
| 145 | + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
| 146 | + with: |
| 147 | + upload_url: ${{ steps.create_release.outputs.upload_url }} |
| 148 | + asset_path: nvidia-driver-libs-x86_64.tar.gz |
| 149 | + asset_name: nvidia-driver-libs-x86_64.tar.gz |
| 150 | + asset_content_type: application/gzip |
58 | 151 | - name: Upload Image.gz for aarch64 |
59 | 152 | uses: actions/upload-release-asset@v1 |
60 | 153 | env: |
|
0 commit comments