【问题标题】:Utilizing all CPU on Google Cloud Compute Engine V;利用 Google Cloud Compute Engine V 上的所有 CPU;
【发布时间】:2020-07-04 21:03:24
【问题描述】:

我在 Google Cloud 上购买了机器类型 e2-highmem-16(16 个 vCPU,128 GB 内存)的访问权限,因为我需要运行大量计算成本高昂的代码。

我在我的 Mac 上使用 ssh 并安装了带有 conda 的 python 和我需要的所有包,我可以运行代码。唯一的问题是代码在 VM 上的运行速度几乎比在我的计算机上运行得慢。根据 Compute Engine 统计,我只使用了 0.03% 的 CPU。这就是为什么它这么慢?如果是这样,我如何利用 100% 的 CPU?

【问题讨论】:

  • 没有看到你的代码就不可能说。您的代码没有针对并行计算进行优化,而是使用了 16 个内核中的 1 个。

标签: python google-cloud-platform virtual-machine google-compute-engine cpu


【解决方案1】:

您没有附加 CODE,但是,假设您有一个为您运行所有计算的主函数,它看起来像这样(足够通用,因此您可以通过 *args 和 * 传递给它*kwargs 你喜欢什么):

def f_execute_work(*args, **kwargs):
    .....
    .....

您可以使用 concurrent.future 模块进行并行执行。它会为你完成工作:

concurrent.futures 模块为异步执行可调用对象提供高级接口。

可以使用线程执行异步执行,使用 ThreadPoolExecutor,或使用 ProcessPoolExecutor 执行单独的进程。两者都实现了相同的接口,由抽象的 Executor 类定义。

import concurrent.futures
with ThreadPoolExecutor(max_workers=psutil.cpu_count()) as executor:
    future = executor.submit(f_execute_work, *args, **kwargs)
    print(future.result())

submit(fn, *args, **kwargs) 安排可调用对象 fn 作为 fn(*args **kwargs) 执行,并返回代表可调用对象执行的 Future 对象。

使用 psutil.cpu_count() 获取逻辑核心数,以调度最大工作人员和利用 cpu 核心。

【讨论】:

  • @TeodorFredriksson - 我很高兴。请投票(按向上箭头)感谢您接受它。很高兴为您提供帮助。
  • 跟进问题!我首先运行了一个较短的代码,它设法获得了大约 80% 的 CPU,现在我运行了一些很长的代码,但它现在在 20%-60% 之间振荡 我也可以设置最低工作人员吗?
猜你喜欢
  • 2014-01-23
  • 2019-12-02
  • 1970-01-01
  • 2018-07-19
  • 2017-12-19
  • 2019-11-02
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多