Codette-Reasoning / scripts /setup_vulkan_gpu.py
Raiff1982's picture
Upload 120 files
ed1b365 verified
#!/usr/bin/env python3
"""
Codette Vulkan GPU Environment Setup
=====================================
Installs all dependencies required to use Vulkan compute acceleration
in Codette's inference and training pipelines.
This script will:
1. Install the kompute library (Vulkan compute for ML)
2. Install vulkan Python bindings (device enumeration)
3. Verify that a Vulkan-capable GPU is detected
4. Run a basic compute shader test
Prerequisites:
- Vulkan-capable GPU (NVIDIA, AMD, Intel Arc, Qualcomm)
- Vulkan runtime/drivers installed:
NVIDIA: Included with driver 470+
AMD: Included with Adreno driver / Mesa
Intel: Included with Arc driver 31.0.101+
- Python 3.9+
"""
import subprocess
import sys
import importlib
import os
def run(cmd: list[str]):
"""Run shell command and stream output."""
print("\n>>>", " ".join(cmd))
subprocess.check_call(cmd)
def pip_install(*packages):
run([sys.executable, "-m", "pip", "install", *packages])
def check_vulkan_runtime() -> bool:
"""Check if the Vulkan runtime is available on the system."""
print("\n--- Checking Vulkan Runtime ---")
# Check for vulkaninfo or Vulkan DLLs
if sys.platform == "win32":
vulkan_dll = os.path.join(
os.environ.get("SystemRoot", r"C:\Windows"),
"System32", "vulkan-1.dll"
)
if os.path.exists(vulkan_dll):
print(f" Found: {vulkan_dll}")
return True
print(f" Not found: {vulkan_dll}")
return False
else:
# Linux/Mac: check for libvulkan.so
import ctypes
try:
ctypes.CDLL("libvulkan.so.1")
print(" Found: libvulkan.so.1")
return True
except OSError:
try:
ctypes.CDLL("libvulkan.dylib")
print(" Found: libvulkan.dylib")
return True
except OSError:
print(" Vulkan runtime library not found")
return False
def install_kompute():
"""Install the kompute Vulkan compute library."""
print("\n--- Installing kompute (Vulkan compute for ML) ---")
try:
pip_install("kp")
return True
except subprocess.CalledProcessError:
print(" WARNING: kompute installation failed.")
print(" This may require Vulkan SDK headers. See: https://kompute.cc")
return False
def install_vulkan_bindings():
"""Install Python vulkan bindings for device enumeration."""
print("\n--- Installing vulkan Python bindings ---")
try:
pip_install("vulkan")
return True
except subprocess.CalledProcessError:
print(" WARNING: vulkan bindings installation failed.")
return False
def verify_vulkan_compute() -> bool:
"""Verify Vulkan compute is functional."""
print("\n--- Verifying Vulkan Compute ---")
# Add inference directory to path for our adapter
inference_dir = os.path.join(
os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
"inference"
)
if inference_dir not in sys.path:
sys.path.insert(0, inference_dir)
try:
from vulkan_compute import VulkanComputeAdapter, detect_vulkan_devices
devices = detect_vulkan_devices()
if not devices:
print("\n No Vulkan-capable GPUs detected by Python bindings.")
print(" Ensure Vulkan drivers are properly installed.")
return False
print(f"\n Found {len(devices)} Vulkan device(s):")
for dev in devices:
print(f" [{dev.device_id}] {dev.name} ({dev.vendor}, {dev.device_type})")
# Functional test
adapter = VulkanComputeAdapter()
if adapter.initialize():
adapter.create_tensor("test_a", [1.0, 2.0, 3.0])
adapter.create_tensor("test_b", [4.0, 5.0, 6.0])
adapter.vector_add("test_a", "test_b", "test_c")
result = adapter.read_tensor("test_c")
expected = [5.0, 7.0, 9.0]
if result == expected:
print(f"\n Compute test PASSED: {result}")
adapter.shutdown()
return True
else:
print(f"\n Compute test FAILED: got {result}, expected {expected}")
adapter.shutdown()
return False
else:
print("\n Adapter initialization failed (device detected but compute unavailable)")
return False
except ImportError as e:
print(f"\n Import error: {e}")
return False
except Exception as e:
print(f"\n Verification error: {e}")
return False
def main():
print("\n" + "=" * 55)
print(" Codette Vulkan GPU Setup")
print("=" * 55)
# Step 1: Check Vulkan runtime
print("\nStep 1: Checking Vulkan runtime")
runtime_ok = check_vulkan_runtime()
if not runtime_ok:
print("\n ERROR: Vulkan runtime not found.")
print(" Please install GPU drivers with Vulkan support:")
print(" NVIDIA: https://www.nvidia.com/drivers")
print(" AMD: https://www.amd.com/en/support")
print(" Intel: https://www.intel.com/content/www/us/en/download-center")
print("\n After installing drivers, re-run this script.")
return
# Step 2: Install kompute
print("\nStep 2: Installing kompute")
kompute_ok = install_kompute()
# Step 3: Install vulkan bindings
print("\nStep 3: Installing vulkan Python bindings")
vulkan_ok = install_vulkan_bindings()
if not kompute_ok and not vulkan_ok:
print("\n ERROR: Neither kompute nor vulkan bindings could be installed.")
print(" Vulkan compute will not be available.")
return
# Step 4: Verify
print("\nStep 4: Verifying Vulkan compute")
ok = verify_vulkan_compute()
print("\n" + "=" * 55)
if ok:
print(" SUCCESS: Vulkan GPU compute is ready for Codette")
print("\n Usage in code:")
print(" from vulkan_compute import VulkanComputeAdapter")
print(" adapter = VulkanComputeAdapter()")
print(" adapter.initialize()")
else:
print(" PARTIAL: Vulkan libraries installed but compute test inconclusive")
print(" The adapter will fall back to CPU operations where needed.")
print("=" * 55)
if __name__ == "__main__":
main()