181 lines
7.1 KiB
Python
181 lines
7.1 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
cuDNN Automated Installer for CUDA 12.9
|
|
This script attempts to download and install cuDNN for GPU acceleration
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
import urllib.request
|
|
import zipfile
|
|
import tempfile
|
|
import shutil
|
|
|
|
def main():
|
|
print("🚀 Starting cuDNN Automated Installation for CUDA 12.9")
|
|
print("=" * 60)
|
|
|
|
# Check CUDA installation
|
|
cuda_path = r'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9'
|
|
if not os.path.exists(cuda_path):
|
|
print(f"❌ CUDA 12.9 not found at: {cuda_path}")
|
|
print("💡 Please install CUDA 12.9 first")
|
|
return False
|
|
|
|
print(f"✅ Found CUDA 12.9 at: {cuda_path}")
|
|
|
|
# Check if cuDNN already exists
|
|
cudnn_dll_path = os.path.join(cuda_path, 'bin', 'cudnn64_8.dll')
|
|
if os.path.exists(cudnn_dll_path):
|
|
print(f"✅ cuDNN already installed at: {cudnn_dll_path}")
|
|
return True
|
|
|
|
print("❌ cuDNN not found. Starting automated installation...")
|
|
|
|
# Known cuDNN download URLs (these may change, we'll try multiple sources)
|
|
cudnn_urls = [
|
|
# Try to find a direct download link (these are placeholders)
|
|
"https://developer.download.nvidia.com/compute/redist/cudnn/v8.9.7/local_installers/12.x/cudnn-windows-x86_64-8.9.7.29_cuda12-archive.zip",
|
|
]
|
|
|
|
# Create temporary directory
|
|
temp_dir = tempfile.mkdtemp()
|
|
|
|
try:
|
|
for url in cudnn_urls:
|
|
print(f"\n📥 Attempting to download cuDNN from: {url}")
|
|
try:
|
|
# Download cuDNN
|
|
download_path = os.path.join(temp_dir, "cudnn.zip")
|
|
urllib.request.urlretrieve(url, download_path)
|
|
|
|
print("✅ Download successful. Extracting...")
|
|
|
|
# Extract cuDNN
|
|
with zipfile.ZipFile(download_path, 'r') as zip_ref:
|
|
zip_ref.extractall(temp_dir)
|
|
|
|
# Find extracted cuDNN directory
|
|
cudnn_extracted = None
|
|
for item in os.listdir(temp_dir):
|
|
item_path = os.path.join(temp_dir, item)
|
|
if os.path.isdir(item_path) and 'cudnn' in item.lower():
|
|
cudnn_extracted = item_path
|
|
break
|
|
|
|
if not cudnn_extracted:
|
|
print("❌ Could not find cuDNN in extracted files")
|
|
continue
|
|
|
|
print(f"✅ Extracted cuDNN to: {cudnn_extracted}")
|
|
|
|
# Copy cuDNN files to CUDA directory
|
|
print("\n📁 Copying cuDNN files to CUDA directory...")
|
|
|
|
# Copy bin files
|
|
cudnn_bin = os.path.join(cudnn_extracted, 'bin')
|
|
if os.path.exists(cudnn_bin):
|
|
for file in os.listdir(cudnn_bin):
|
|
if file.startswith('cudnn'):
|
|
src = os.path.join(cudnn_bin, file)
|
|
dst = os.path.join(cuda_path, 'bin', file)
|
|
shutil.copy2(src, dst)
|
|
print(f" ✅ Copied: {file} -> {dst}")
|
|
|
|
# Copy include files
|
|
cudnn_include = os.path.join(cudnn_extracted, 'include')
|
|
if os.path.exists(cudnn_include):
|
|
for file in os.listdir(cudnn_include):
|
|
if file.startswith('cudnn'):
|
|
src = os.path.join(cudnn_include, file)
|
|
dst = os.path.join(cuda_path, 'include', file)
|
|
shutil.copy2(src, dst)
|
|
print(f" ✅ Copied: {file} -> {dst}")
|
|
|
|
# Copy lib files
|
|
cudnn_lib = os.path.join(cudnn_extracted, 'lib')
|
|
if os.path.exists(cudnn_lib):
|
|
for file in os.listdir(cudnn_lib):
|
|
if file.startswith('cudnn'):
|
|
src = os.path.join(cudnn_lib, file)
|
|
dst = os.path.join(cuda_path, 'lib', 'x64', file)
|
|
shutil.copy2(src, dst)
|
|
print(f" ✅ Copied: {file} -> {dst}")
|
|
|
|
# Verify installation
|
|
if os.path.exists(cudnn_dll_path):
|
|
print(f"\n🎉 cuDNN successfully installed at: {cudnn_dll_path}")
|
|
return True
|
|
else:
|
|
print("❌ cuDNN installation verification failed")
|
|
continue
|
|
|
|
except Exception as e:
|
|
print(f"❌ Download/Installation failed: {e}")
|
|
continue
|
|
|
|
# If all URLs failed, provide manual instructions
|
|
print("\n" + "=" * 60)
|
|
print("🔧 MANUAL INSTALLATION REQUIRED")
|
|
print("=" * 60)
|
|
print("Automated download failed. Please install cuDNN manually:")
|
|
print("\nSteps:")
|
|
print("1. Visit: https://developer.nvidia.com/cudnn")
|
|
print("2. Login with NVIDIA Developer account (free)")
|
|
print("3. Download cuDNN for CUDA 12.x")
|
|
print("4. Extract the zip file")
|
|
print("5. Copy these files to CUDA directory:")
|
|
print(f" - bin\\cudnn64_8.dll -> {cuda_path}\\bin\\")
|
|
print(f" - include\\cudnn*.h -> {cuda_path}\\include\\")
|
|
print(f" - lib\\cudnn*.lib -> {cuda_path}\\lib\\x64\\")
|
|
print("\n6. Add CUDA to PATH:")
|
|
print(f" {cuda_path}\\bin")
|
|
|
|
return False
|
|
|
|
finally:
|
|
# Clean up temporary directory
|
|
if os.path.exists(temp_dir):
|
|
shutil.rmtree(temp_dir)
|
|
|
|
def test_gpu_after_install():
|
|
print("\n" + "=" * 60)
|
|
print("🧪 Testing GPU Acceleration After Installation")
|
|
print("=" * 60)
|
|
|
|
try:
|
|
import paddle
|
|
print(f"✅ PaddlePaddle version: {paddle.__version__}")
|
|
print(f"🏁 CUDA compiled: {paddle.is_compiled_with_cuda()}")
|
|
print(f"🏁 GPU count: {paddle.device.cuda.device_count()}")
|
|
|
|
if paddle.device.cuda.device_count() > 0:
|
|
print(f"🏁 Current GPU device: {paddle.device.cuda.get_device_name()}")
|
|
|
|
# Test GPU tensor operations
|
|
paddle.set_device('gpu:0')
|
|
x = paddle.to_tensor([1.0, 2.0, 3.0])
|
|
y = paddle.to_tensor([4.0, 5.0, 6.0])
|
|
z = x + y
|
|
print(f"✅ GPU tensor operation successful: {z.numpy()}")
|
|
print(f"✅ Tensor is on GPU: {z.place.is_gpu_place()}")
|
|
print("🎉 PaddlePaddle GPU is working!")
|
|
return True
|
|
else:
|
|
print("❌ No GPU devices detected")
|
|
return False
|
|
|
|
except Exception as e:
|
|
print(f"❌ GPU test failed: {e}")
|
|
return False
|
|
|
|
if __name__ == "__main__":
|
|
# First try to install cuDNN
|
|
success = main()
|
|
|
|
# Then test GPU
|
|
if success:
|
|
test_gpu_after_install()
|
|
else:
|
|
print("\n❌ cuDNN installation failed. GPU acceleration unavailable.")
|
|
print("💡 The system will continue to work in CPU mode.") |