【教程】如何利用深度学习硬件的“闲置时间”来挖矿

简介: 最近比特币价格一路飙升,您可以利用深度学习硬件的“闲散时间”来挖矿从而获取利润。本文作者自己写了一个GPU监视器gpu_mon,定期检查追踪GPU。如果GPU处于闲置状态,gpu_mon将运行您在config文件中指定的程序。

没有GPU,深度学习就无法进行。但当你没有优化任何东西时,如何让所有的teraflops都被充分利用?

最近比特币价格一路飙升,您可以考虑利用这些闲置的资源来获取利润。这并不难,你需要做的就是设置一个钱包,选择要挖掘的东西,建立一个矿工软件并运行它。在谷歌上搜索“如何开始在GPU上挖矿”,有很多详细说明如何挖矿的文章。

33f9ea3f670c91d020ff00a2b8e7b98ee02d5361

如何使挖矿更便捷?

如果我突然想把所有马力全部投入到新的深度学习问题,如何使挖矿变得便捷、自动化和无干扰?理想的解决方案是:一些background thing不断检查GPU的利用率,当没有人使用它,就启动矿工。但是,当TensorFlow或PyTorch或其他工具想要压缩一些数字时,这个监视器必须尽快停止挖掘,以便将计算内核释放到有用的任务上。

尽管问题很简单,但我还没有发现任何类似的东西,所以我自己写了一个GPU监视器(GPU monitor)。它很通用,不仅适用于挖矿,你还可以尝试用它做别的事情。

必要条件

我的项目叫gpu_mon,源代码可以在这里找到:https://github.com/Shmuma/gpu_mon。它是用python 3编写的,除了标准库之外不依赖任何东西,但是它应该在Linux系统上运行,所以如果你在深度学习box上使用windows,gpu_mon将不起作用。

整体逻辑与上面描述的完全一样:gpu_mon定期检查GPU,如果没有人使用它,它将运行您在config文件中指定的程序。如果某个进程打开GPU设备,运行中的挖矿将中断以释放资源。所以,在设置完所有东西并启动显示器后,你需要做的就是照常使用你的GPU box,矿工和深度学习之间的overlap只需几秒钟。

要获取访问GPU设备(假定为/ dev/ nvidia *)的进程列表,请使用fuser命令行工具。在基于Debian的distribution中,比如ubuntu或debian,是由psmisc软件包提供的。如果我没有弄错的话,它将被包含在基本系统安装中,所以不需要安装任何东西。如果您的系统没有提供fuser,请进行安装。

配置

整个项目被配置在一个单独的配置文件中,该配置文件具有ini-file格式,并且预计将位于〜/ .config / gpu_mon.conf文件的主目录中。示例配置文件如下所示,也可在项目源文件中找到。

配置文件可包含四部分:

1. 默认全局配置[defaults]。这里只有一个选项,它指定GPU设备检查使用的频率。默认情况下,每10秒执行一次检查,并收集有关系统中所有GPU的数据。

2. GPU配置可以由一个或多个名称中带有gpu-prefix的部分来指定。您可以通过指定其ID(在/ dev / nvidiaX设备文件中的整数)来描述安装的GPU卡组。对于每个GPU组,您都可以提供不会抢占GPU的矿工进程的程序列表。这对nvidia-smi等工具非常有用,它可以访问GPU设备,但应该不会导致挖矿停止。

3. 矿工进程配置部分可以用名字中带有process-前缀的一个或多个部分来描述。对于每个部分,您可以指定要运行的矿工的命令行,从中启动矿工的目录名称,希望矿工受到限制的GPU标识和日志文件的名称。

4. TTY监控部分,它允许您启用可选的伪终端监控,抢占矿工。该功能在默认情况下被禁用。

下面是我在带有2个GPU卡的box上使用的配置文件示例。

[defaults]
; how frequently perform GPU open and tty checks
interval_seconds=10
; configuration of GPUs to monitor for external program access. It could be several such sections
[gpu-all]
; list of comma-separated gpu indices or ALL to handle all available gpus
gpus=ALL
; comma-separated list of programs which can access gpu and should be ignored
ignore_programs=nvidia-smi
; program which will be started on gpu during idle time
[process-0]
dir=/tmp
cmd=/var/bin/miner
; list of gpu indices or ALL to handle all available gpus. If not ALL, CUDA_VISIBLE_DEVICES will be set
gpus=0
log=/var/log/miner-0.log
[process-1]
dir=/tmp
cmd=/var/bin/miner
; list of gpu indices or ALL to handle all available gpus. If not ALL, CUDA_VISIBLE_DEVICES will be set
gpus=1
log=/var/log/miner-1.log

; configuration of tty monitoring
[tty]
enabled=False

此配置允许通过为系统中的每个卡指定单独进程,来对GPU使用进行细粒度控制。因此,如果我运行只占用第一个GPU的深度学习进程(通过导出CUDA_VISIBLE_DEVICE = 0),在第二个GPU上启动的矿工进程将继续工作。但是,如果我的优化打开两个GPU卡,两个矿工将被取代,资源将被释放。

正如我所说的,一切都是透明的。所以,你不应该在开始和停止矿工的过程中花费太多精力,只需要想想,运行TF或者PyTorch时要为你的深度学习优化分配多少GPU。

下面是我可以提供的一些额外信息。

自动启动gpu_mon

为了使gpu_mon完全没有问题,我们需要确保在系统启动时它在后台启动。有很多方法可以启动一个进程,但我最喜欢的解决方案是用supervisord,用于检查正在运行的进程,并在发生崩溃时重新启动进程。为了启动gpu_mon,首先需要设置supervisord。如果还没有安装,可以将配置文件放入/etc/supervisor/conf.d/gpu_mon.conf中。以下是我使用的配置:

[program:gpu_mon]
command=/usr/bin/python3 <PATH_TO_CLONED_GPU_MON>/gpu_mon/gpu_mon.py
user=<YOUR USERNAME>
environment=HOME=<YOUR_HOME_PATH>,USER=<YOUR_USERNAME>
autostart=true
autorestart=true

安装完成后,你需要重新启动supervisord,并通过运行以下命令来检查gpu_mon是否已启动:supervisorctl status gpu_mon,它应该返回如下所示的内容:

root@gpu:/etc/supervisor/conf.d# supervisorctl status gpu_mon
gpu_mon RUNNING pid 1526, uptime 57 days, 18:14:27

多用户访问GPU

如果gpu_mon以一个用户身份运行,但是深度学习软件可以作为另一个用户或由多用户运行,则gpu_mon可能无法抢占矿工。发生这种情况是由于fuser命令的安全限制,它不会显示其他用户进程打开设备文件。如果你遇到这种情况,但是仍然想要使用gpu_mon,你有两种选择:

*以root身份运行gpu_mon。我不推荐这种方法,因为以root身份启动某些东西总是一个坏主意。

*将SUID位添加到fuser二进制文件。在Ubuntu distribution中,这可以通过运行chmod + s / bin / fuser命令来完成,并且它有效地允许fuser查看所有访问该文件的用户,就像SUID位一样,binary也是以文件所有者凭据启动的。但是你仍然需要root权限才能做到这一点。

怎么去挖矿?挖什么?

多亏了现在加密货币的繁荣发展,有很多可用的选项。我个人最喜欢的是基于equihash的货币,比如ZCash或者Komodo,它们都可以用一个矿工挖矿。我使用修改后的版本EWBF miner,比原始版本快10%。

正如我所说的,gpu_mon不会进行自我挖掘,它只是一个GPU访问跟踪器。所以,你可以运行任何你想要的CUDA优化的矿工。

能赚钱吗?

能赚钱。但加密货币的复杂性正在增长,不要指望用一张1080卡挖到百万美元。但总体上,挖矿所得减去挖矿电费,最后还是能够盈利的。所以去挖吧!有一个网站可以告诉你,在给定的复杂性、汇率和你的算力等前提下,挖矿收入大约是多少。网址是https://whattomine.com/。


原文发布时间为:2017-12-25

本文作者:西西莉亚 

本文来自云栖社区合作伙伴新智元,了解相关信息可以关注“AI_era”微信公众号

原文链接:【教程】如何利用深度学习硬件的“闲置时间”来挖矿

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
7月前
|
机器学习/深度学习 数据采集 PyTorch
图像分类保姆级教程-深度学习入门教程(附全部代码)
图像分类保姆级教程-深度学习入门教程(附全部代码)
|
4月前
|
机器学习/深度学习 人工智能 前端开发
BladeDISC 深度学习编译器问题之BladeDISC在新硬件支持方面如何解决
BladeDISC 深度学习编译器问题之BladeDISC在新硬件支持方面如何解决
|
4月前
|
机器学习/深度学习 人工智能 前端开发
BladeDISC 深度学习编译器问题之实现硬件适配如何解决
BladeDISC 深度学习编译器问题之实现硬件适配如何解决
|
4月前
|
机器学习/深度学习 存储 并行计算
深度学习之适应硬件的神经网络
深度学习的适应硬件的神经网络设计旨在最大限度地利用特定硬件平台的计算和存储能力,提高模型的执行效率和性能。这些硬件包括图形处理单元(GPU)、张量处理单元(TPU)、现场可编程门阵列(FPGA)和专用集成电路(ASIC)。
60 0
|
5月前
|
机器学习/深度学习 自然语言处理 TensorFlow
使用Python实现深度学习模型:序列建模与生成模型的博客教程
【7月更文挑战第2天】 使用Python实现深度学习模型:序列建模与生成模型的博客教程
59 1
|
7月前
|
机器学习/深度学习 人工智能 PyTorch
《人工智能专栏》专栏介绍 & 专栏目录 & Python与Python | 机器学习 | 深度学习 | 目标检测 | YOLOv5及其改进 | YOLOv8及其改进 | 关键知识点 | 各种工具教程
《人工智能专栏》专栏介绍 & 专栏目录 & Python与Python | 机器学习 | 深度学习 | 目标检测 | YOLOv5及其改进 | YOLOv8及其改进 | 关键知识点 | 各种工具教程
191 1
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
豆瓣评分9.5!清华大牛熬夜整理的Python深度学习教程开发下载!
深度学习目前已经成为了人工智能领域的突出话题。它在“计算机视觉和游戏(AlphaGo)等领域的突出表现而闻名。 今天给小伙伴们分享的这份手册,详尽介绍了用 Python 和 Keras进行深度学习的探索实践,涉及计算机视觉、自然语言处理、生成式模型等应用。
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
豆瓣评分9.5!清华大牛熬夜整理的Python深度学习教程开发下载!
深度学习目前已经成为了人工智能领域的突出话题。它在“计算机视觉和游戏(AlphaGo)等领域的突出表现而闻名。 今天给小伙伴们分享的这份手册,详尽介绍了用 Python 和 Keras进行深度学习的探索实践,涉及计算机视觉、自然语言处理、生成式模型等应用。
|
5月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
使用Python实现深度学习模型:迁移学习与领域自适应教程
【7月更文挑战第3天】 使用Python实现深度学习模型:迁移学习与领域自适应教程
100 0
|
6月前
|
机器学习/深度学习 自然语言处理 TensorFlow
使用Python实现深度学习模型:BERT模型教程
使用Python实现深度学习模型:BERT模型教程
277 0