如何解决在PyTorch模型的GPU之间调度作业
我正在尝试建立一个系统,该系统可以根据请求训练深度模型。用户进入我的网站,单击一个按钮,然后开始培训过程。
但是,我有两个GPU,我不确定哪种是在两个GPU之间排队/处理作业的最佳方法:在至少有一个GPU可用的情况下启动作业,如果当前没有GPU,则将该作业排队可用。我想针对每个工作请求使用一个GPU。
这是我可以和芹菜一起做的吗?我过去曾使用过此方法,但不确定如何处理与GPU相关的问题。
非常感谢!
解决方法
不确定celery
,因为我从未使用过它,但从概念上讲似乎是合理的(无论如何,这个问题还是很开放的):
- 创建仅负责将任务分配给某些GPU并接收请求的线程
- 如果有任何GPU是免费的,请立即为其分配任务
- 如果两个人都被占用了估计时间,则可能需要花费时间来完成任务(神经网络训练)
- 将其添加到GPU的时间大约最短
时间估计
给定固定数量的样本和纪元,可以很好地近似当前任务的ETA。如果不是这种情况(例如提前停止),将会变得越来越困难,并且需要进行启发式搜索。 GPU过载时(例如每个GPU队列中有5
个任务),我要做的是:
- GPU上目前正在进行停止进程
- 对几批数据运行新流程以粗略估计完成此任务可能需要多长时间
- 询问所有任务的估计量
现在,这取决于流量。如果它很大并且会经常中断正在进行的进程,则您只需将新任务添加到任务量最少的GPU队列中(这里也需要一些启发式,假设您现在已经估计了可能的请求量)只有2个GPU,可能不会很大)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。