我正在使用一些我计划在不久的将来在服务器上运行的代码。现在,它可以在我本地的机器上工作,但是多人将同时运行该程序。我担心他们会使用比可用的更多RAM或VRAM。如果我使用dask,它将在执行函数调用之前等待可用资源?
示例代码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from numba import njit
import numpy as np
from dask.distributed import Client, LocalCluster
@njit
def addingNumbers (big_array, big_array2, save_array):
for i in range (big_array.shape[0]):
for j in range (big_array.shape[1]):
save_array[i][j] = big_array[i][j] * big_array2[i][j]
return save_array
if __name__ == "__main__":
cluster = LocalCluster()
client = Client(cluster)
big_array = np.random.random_sample((100, 3000))
big_array2 = np.random.random_sample((100, 3000))
save_array = np.zeros(shape=(100, 3000))
x = client.submit(addingNumbers, big_array, big_array2, save_array)
y = client.gather(x)
如果多个人同时运行上述代码,并且服务器几乎不在RAM中,请等到RAM可以提交功能,否则会提交该功能,并且服务器将获得存储器的失误错误?
如果Dask不等待直到RAM可用,您将如何排队函数调用?谢谢
如果我使用dask,它将在执行函数调用之前等待可用资源?
dask无法预测您的功能需要多少RAM。但是,您可以在存储的数据上设置一个内存限制,如果DASK达到该限制,则一旦达到该限制,它将停止运行任务,而将其推到磁盘上。请参阅https://distributed.dask.org/en/latest/worker.html#memory-management
您将如何排队函数调用?
最简单的解决方案是限制工人中的活动线程数量,或使用工人资源来限制每个工人的某些任务的并发。