【Google Colab】 上システム・ベンチマークを比較してみた

Google Colab を活用して、Python を使ったシステム情報の取得や CPU / GPU のベンチマークを行いました。

PythonPython

【Google Colab】 上システム・ベンチマークを比較してみた

Google Colab を活用して、Python を使ったシステム情報の取得や CPU / GPU のベンチマークを行いました。今回は「ローカルランタイム」、「CPU 専用環境」、「GPU 専用環境」、「TPU 環境」といった各環境の詳細情報と実行時間を比較し、その結果をまとめています。

Python コード例

以下のコードは、システム情報(OS、CPU、メモリ、GPU)を取得し、CPU と GPU の行列積ベンチマークを実施するものです。

import platform
import psutil
import tensorflow as tf
import numpy as np
import time
import subprocess

def get_size(bytes, suffix="B"):
    """バイト数を適切な単位に変換する関数"""
    factor = 1024
    for unit in ["", "K", "M", "G", "T", "P"]:
        if bytes < factor:
            return f"{bytes:.2f}{unit}{suffix}"
        bytes /= factor

# --- OS 情報 ---
print("========== OS 情報 ==========")
uname = platform.uname()
print(f"System     : {uname.system}")
print(f"Node Name  : {uname.node}")
print(f"Release    : {uname.release}")
print(f"Version    : {uname.version}")
print(f"Machine    : {uname.machine}")
print(f"Processor  : {uname.processor}\n")

# --- CPU 情報 ---
print("========== CPU 情報 ==========")
print(f"Physical cores : {psutil.cpu_count(logical=False)}")
print(f"Total cores    : {psutil.cpu_count(logical=True)}")
cpufreq = psutil.cpu_freq()
print(f"Current Frequency: {cpufreq.current:.2f} Mhz")
print("CPU Usage Per Core:")
for i, percentage in enumerate(psutil.cpu_percent(percpu=True, interval=1)):
    print(f"  Core {i}: {percentage}%")
print(f"Total CPU Usage: {psutil.cpu_percent()}%\n")

# --- Memory 情報 ---
print("========== Memory 情報 ==========")
svmem = psutil.virtual_memory()
print(f"Total     : {get_size(svmem.total)}")
print(f"Available : {get_size(svmem.available)}")
print(f"Used      : {get_size(svmem.used)}")
print(f"Percentage: {svmem.percent}%\n")

# --- GPU 情報 (nvidia-smi を使用) ---
print("========== GPU 情報 ==========")
try:
    gpu_output = subprocess.check_output(
        ["nvidia-smi", "--query-gpu=name,driver_version,memory.total,memory.used,memory.free,temperature.gpu,utilization.gpu",
         "--format=csv,noheader"],
        universal_newlines=True
    )
    print(gpu_output)
except Exception as e:
    print("GPU 情報の取得に失敗しました:", e)

# --- CPU ベンチマーク (NumPy 行列積) ---
def benchmark_cpu():
    print("----- CPU ベンチマーク (NumPy 行列積) -----")
    A = np.random.rand(1000, 1000)
    B = np.random.rand(1000, 1000)
    start = time.time()
    _ = np.dot(A, B)
    end = time.time()
    print(f"実行時間: {end - start:.4f} seconds\n")

# --- GPU ベンチマーク (TensorFlow 行列積) ---
def benchmark_gpu():
    print("----- GPU ベンチマーク (TensorFlow 行列積) -----")
    gpus_tf = tf.config.list_physical_devices('GPU')
    if not gpus_tf:
        print("GPU が検出されませんでした。")
        return
    # ランダムな行列の作成
    A = tf.random.normal([1000, 1000])
    B = tf.random.normal([1000, 1000])
    # ウォームアップ
    _ = tf.matmul(A, B)
    start = time.time()
    C = tf.matmul(A, B)
    _ = C.numpy()  # 計算完了を待つ
    end = time.time()
    print(f"実行時間: {end - start:.4f} seconds\n")

benchmark_cpu()
benchmark_gpu()

結果

上記のコードのCPUでの実行結果は以下のようになります。

========== OS 情報 ==========
System     : Linux
Node Name  : 07de74ea16c1
Release    : 6.1.85+
Version    : #1 SMP PREEMPT_DYNAMIC Thu Jun 27 21:05:47 UTC 2024
Machine    : x86_64
Processor  : x86_64

========== CPU 情報 ==========
Physical cores : 1
Total cores    : 2
Max Frequency  : 0.00 Mhz
Min Frequency  : 0.00 Mhz
Current Frequency: 2200.21 Mhz
CPU Usage Per Core:
  Core 0: 30.3%
  Core 1: 16.0%
Total CPU Usage: 19.9%

========== Memory 情報 ==========
Total     : 12.67GB
Available : 10.93GB
Used      : 1.44GB
Percentage: 13.8%

========== GPU 情報 ==========
GPU 情報の取得に失敗しました: [Errno 2] No such file or directory: 'nvidia-smi'

----- CPU ベンチマーク (NumPy 行列積) -----
実行時間: 0.1201 seconds

----- GPU ベンチマーク (TensorFlow 行列積) -----
GPU が検出されませんでした。

各環境の比較結果

以下の表は、ローカルランタイム、CPU 専用、GPU 専用、TPU 環境のシステム情報とベンチマーク結果の比較です。

自分のマシンが思った以上に貧弱でショックです…

項目 ローカルランタイム、CPU CPU 専用環境 GPU 専用環境 TPU 環境
OS 情報 Linux
WSL2: 5.15.167.4-microsoft-standard-WSL2
#1 SMP Tue Nov 5 00:21:55 UTC 2024
Linux
6.1.85+
#1 SMP PREEMPT_DYNAMIC Thu Jun 27 21:05:47 UTC 2024
Linux
6.1.85+
#1 SMP PREEMPT_DYNAMIC Thu Jun 27 21:05:47 UTC 2024
Linux
6.1.85+
#1 SMP PREEMPT_DYNAMIC Thu Jun 27 21:05:47 UTC 2024
CPU 情報 6 physical / 12 logical
Current Frequency: 1608.00 Mhz
Total Usage: 4.7%
1 physical / 2 logical
Current Frequency: 2200.21 Mhz
Total Usage: 19.9%
1 physical / 2 logical
Current Frequency: 2000.11 Mhz
Total Usage: 81.9%
48 physical / 96 logical
Current Frequency: 2000.21 Mhz
Total Usage: 1.6%
Memory 情報 15.62GB total
12.02GB available
3.14GB used (23.1%)
12.67GB total
10.93GB available
1.44GB used (13.8%)
12.67GB total
11.32GB available
1.05GB used (10.7%)
334.56GB total
329.65GB available
2.73GB used (1.5%)
GPU 情報 NVIDIA GeForce GTX 1650 with Max‑Q Design
Driver: 551.86
4096 MiB total, 577 MiB used, 3362 MiB free
Temp: 58°C, 23% utilization
GPU 情報取得失敗(nvidia-smi が存在しない) Tesla T4
Driver: 550.54.15
15360 MiB total, 0 MiB used, 15095 MiB free
Temp: 48°C, 0% utilization
GPU 情報取得失敗(nvidia-smi が存在しない)
CPU ベンチマーク 0.1532 seconds 0.1201 seconds 0.1401 seconds 0.0067 seconds
GPU ベンチマーク 0.0740 seconds GPU 非検出 0.0203 seconds GPU 非検出

まとめ

今回の実験では、Google Colab 上で各種環境のシステム情報やベンチマーク結果を Python を使って取得しました。

各環境ごとに使用状況や性能が大きく異なるため、用途に合わせた環境選択が重要です。

Keep reading

記事を検索 →