惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
J
Java Code Geeks
I
InfoQ
腾讯CDC
Vercel News
Vercel News
IT之家
IT之家
V
Visual Studio Blog
P
Proofpoint News Feed
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
G
Google Developers Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 叶小钗
有赞技术团队
有赞技术团队
月光博客
月光博客
Martin Fowler
Martin Fowler
量子位
L
LangChain Blog
B
Blog
Last Week in AI
Last Week in AI
博客园 - 司徒正美
Microsoft Security Blog
Microsoft Security Blog
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
A
About on SuperTechFans

博客园 - bregman

codexapp不能显示数学公式问题 统计用户使用目录 intel mac 安装 最新版torch node安装 使用Codex问题 测评数据集和大模型报告 litellm 使用介绍 KL 散度 podman 替代docker 【代码片段】key-value格式解析 安装 flash-attention windows通过ssh去连接Linux服务器 大模型课件 CSE 234: Data Systems for Machine Learning 大模型训练ultrascale-playbook bash脚本片段 mac 下镜像使用 使用大模型 调用本地大模型 语言模型资料 使用Python内置的 pdb 模块 debug 快手MARM 文章理解 【脚本片段】cat中防止变量替换
容器中pytorch的cpu速度很慢,原因找到了
bregman · 2025-11-05 · via 博客园 - bregman
  • 容器中pytorch的cpu速度很慢,原因找到了
# import numpy as np
# import time
# import torch
# import os

# os.environ['OMP_NUM_THREADS'] = '8'  # 增加线程数
# torch.set_num_threads(8)  # 设置PyTorch线程数

# # 创建测试矩阵
# device = 'cuda' if torch.cuda.is_available() else 'cpu'
# print(f"使用设备: {device}")
# B = torch.randn(2000, 2000).to(device)  # 使用GPU

# # 预热GPU
# if device == 'cuda':
#     _ = torch.svd(torch.randn(100,100).to(device))

# # 计时SVD
# start = time.time()
# with torch.no_grad():  # 禁用梯度计算
#     x = torch.svd(B)
# end = time.time()

# print(f"SVD耗时: {end - start:.2f}秒")

import time
import numpy as np
import torch
import os

def diagnose_torch_svd():
    print("=== PyTorch SVD性能诊断 ===")
    
    # 1. 检查系统配置
    print("\n1. 系统配置:")
    print(f"PyTorch线程数: {torch.get_num_threads()}")
    print(f"PyTorch interop线程数: {torch.get_num_interop_threads()}")
    print(f"OMP_NUM_THREADS: {os.environ.get('OMP_NUM_THREADS', '未设置')}")
    print(f"MKL_NUM_THREADS: {os.environ.get('MKL_NUM_THREADS', '未设置')}")
    
    # 2. 创建测试数据
    print("\n2. 性能测试:")
    size = 1000
    numpy_array = np.random.randn(size, size).astype(np.float64)
    torch_tensor = torch.from_numpy(numpy_array.copy())
    
    # 3. NumPy基准
    start = time.time()
    U_np, s_np, Vt_np = np.linalg.svd(numpy_array, full_matrices=False)
    numpy_time = time.time() - start
    
    # 4. PyTorch测试
    start = time.time()
    U_pt, s_pt, Vt_pt = torch.svd(torch_tensor, some=True)
    torch_time = time.time() - start
    
    print(f"NumPy SVD: {numpy_time:.4f}s")
    print(f"PyTorch SVD: {torch_time:.4f}s")
    print(f"速度比: {torch_time/numpy_time:.2f}x")
    
    # 5. 优化建议
    print("\n3. 优化建议:")
    if torch_time > 2 * numpy_time:
        print("⚠️  PyTorch SVD明显慢于NumPy,建议:")
        print("   - 设置 torch.set_num_threads(4)")
        print("   - 检查环境变量 OMP_NUM_THREADS 和 MKL_NUM_THREADS")
        print("   - 考虑对大型矩阵使用NumPy后端")
    else:
        print("✅ PyTorch SVD性能正常")

# 运行诊断
# diagnose_torch_svd()

# 优化后重新测试
print("\n" + "="*50)
print("应用优化后:")

# 应用优化
# os.environ['OMP_NUM_THREADS'] = '4'
# os.environ['MKL_NUM_THREADS'] = '4'
torch.set_num_threads(8)

diagnose_torch_svd()