1. 程式人生 > 其它 >用深度學習硬體的閒置時間,來挖比特幣

用深度學習硬體的閒置時間,來挖比特幣

沒有GPU,深度學習就無法進行。但當你沒有優化任何東西時,如何讓所有的teraflops都被充分利用?

最近比特幣價格一路飆升,您可以考慮利用這些閒置的資源來獲取利潤。這並不難,你需要做的就是設定一個錢包,選擇要挖掘的東西,建立一個礦工軟體並執行它。在谷歌上搜索“如何開始在GPU上挖礦”,有很多詳細說明如何挖礦的文章。

如何使挖礦更便捷?

如果我突然想把所有馬力全部投入到新的深度學習問題,如何使挖礦變得便捷、自動化和無干擾?理想的解決方案是:一些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。

下面是我可以提供的一些額外資訊:

1、自動啟動gpu_mon

為了使gpu_mon完全沒有問題,我們需要確保在系統啟動時它在後臺啟動。有很多方法可以啟動一個程序,但我最喜歡的解決方案是用supervisord,用於檢查正在執行的程序,並在發生崩潰時重新啟動程序。為了啟動gpu_mon,首先需要設定supervisord。如果還沒有安裝,可以將配置檔案放入/etc/supervisor/conf.d/gpu_mon.conf中。以下是我使用的配置:

安裝完成後,你需要重新啟動supervisord,並通過執行以下命令來檢查gpu_mon是否已啟動:supervisorctl status gpu_mon,它應該返回如下所示的內容:

2、多使用者訪問GPU

如果gpu_mon以一個使用者身份執行,但是深度學習軟體可以作為另一個使用者或由多使用者執行,則gpu_mon可能無法搶佔礦工。發生這種情況是由於fuser命令的安全限制,它不會顯示其他使用者程序開啟裝置檔案。如果你遇到這種情況,但是仍然想要使用gpu_mon,你有兩種選擇:

*以root身份執行gpu_mon。我不推薦這種方法,因為以root身份啟動某些東西總是一個壞主意。

*將SUID位新增到fuser二進位制檔案。在Ubuntu distribution中,這可以通過執行chmod + s / bin / fuser命令來完成,並且它有效地允許fuser檢視所有訪問該檔案的使用者,就像SUID位一樣,binary也是以檔案所有者憑據啟動的。但是你仍然需要root許可權才能做到這一點。

3、怎麼去挖礦?挖什麼?

多虧了現在加密貨幣的繁榮發展,有很多可用的選項。我個人最喜歡的是基於equihash的貨幣,比如ZCash或者Komodo,它們都可以用一個礦工挖礦。我使用修改後的版本EWBF miner,比原始版本快10%。

正如我所說的,gpu_mon不會進行自我挖掘,它只是一個GPU訪問跟蹤器。所以,你可以執行任何你想要的CUDA優化的礦工。