在编程中,调用 集成显卡(集显)
和 独立显卡(独显)
通常涉及设置GPU设备和执行计算任务。以下是一些示例代码,展示了如何在不同编程环境中使用 集显
和 独显
。
文章目录
- 1. 使用CUDA和PyTorch调用GPU
- 检查可用的GPU设备
- 设置默认GPU设备
- 将模型和数据移动到GPU
- 2. 使用TensorFlow调用GPU
- 检查可用的GPU设备
- 设置GPU内存增长
- 将模型和数据移动到GPU
- 3. 使用Numba调用GPU
1. 使用CUDA和PyTorch调用GPU
检查可用的GPU设备
首先,检查系统中可用的GPU设备:
import torch# 检查可用的GPU设备
if torch.cuda.is_available():print(f"Available GPUs: {torch.cuda.device_count()}")for i in range(torch.cuda.device_count()):print(f"GPU {i}: {torch.cuda.get_device_name(i)}")
else:print("No GPU available, using CPU.")
设置默认GPU设备
设置默认的GPU设备,以便在代码中使用:
# 设置默认的GPU设备
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(f"Using device: {device}")
将模型和数据移动到GPU
将模型和数据移动到指定的GPU设备上:
# 定义一个简单的模型
model = torch.nn.Linear(10, 1)
model.to(device)# 定义输入数据
input_data = torch.randn(16, 10).to(device)# 执行前向传播
output = model(input_data)
print(output)
2. 使用TensorFlow调用GPU
检查可用的GPU设备
检查系统中可用的GPU设备:
import tensorflow as tf# 检查可用的GPU设备
gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:for gpu in gpus:print(f"Available GPU: {gpu}")
else:print("No GPU available, using CPU.")
设置GPU内存增长
为了避免GPU内存分配问题,可以设置GPU内存增长:
# 设置GPU内存增长
for gpu in gpus:tf.config.experimental.set_memory_growth(gpu, True)
将模型和数据移动到GPU
将模型和数据移动到指定的GPU设备上:
# 定义一个简单的模型
model = tf.keras.Sequential([tf.keras.layers.Dense(1, input_shape=(10,))
])# 定义输入数据
input_data = tf.random.normal([16, 10])# 执行前向传播
with tf.device('/GPU:0'): # 指定使用第一个GPU设备output = model(input_data)print(output)
3. 使用Numba调用GPU
Numba是一个用于Python的JIT编译器,可以加速数值计算。以下是一个使用Numba调用GPU的示例:
from numba import cuda
import numpy as np# 检查可用的GPU设备
device = cuda.get_current_device()
print(f"Using GPU: {device.name}")# 定义一个简单的GPU函数
@cuda.jit
def add_kernel(a, b, c):i = cuda.grid(1)if i < c.size:c[i] = a[i] + b[i]# 准备输入数据
a = np.array([1, 2, 3, 4], dtype=np.float32)
b = np.array([5, 6, 7, 8], dtype=np.float32)
c = np.zeros_like(a)# 将数据移动到GPU
d_a = cuda.to_device(a)
d_b = cuda.to_device(b)
d_c = cuda.to_device(c)# 执行GPU计算
threads_per_block = 32
blocks_per_grid = (a.size + threads_per_block - 1) // threads_per_block
add_kernel[blocks_per_grid, threads_per_block](d_a, d_b, d_c)# 将结果从GPU移动回CPU
c = d_c.copy_to_host()
print(c)