教程 | 如何使用深度學習硬體的空餘算力自動挖礦

來源:互聯網
上載者:User
人工智慧和虛擬貨幣是 2017 年的兩大重要名詞,作為一名開發人員,如何充分利用自己昂貴的硬體裝置呢。本文將給你一種有趣的解決方案。



如果沒有 GPU,現代深度學習是不可能發展到今天的水平的。即使是 MNIST 資料集上的簡單樣本演算法在 GPU 和 CPU 上運行速度的差別也有 10-100 倍。但是,當你沒有最佳化所有設定時,GPU 閒置算力該作何用。



既然擁有了強大的計算裝置,我們不免會考慮到虛擬貨幣挖礦。事實上這並不是很難,你需要的只是註冊一個錢包,選擇一種貨幣,設定好挖礦軟體然後運行即可。只需要 Google 一下「如何用 GPU 開始挖礦。」,你就能看到大量介紹性文章手把手地教你如何操作。


最佳化效率


在本文中,我們需要加入另一個問題:如何讓挖礦變得更加方便、自動化,同時在我需要讓電腦全力運行深度學習模型時不讓工作受到打擾。理想的解決方案是讓電腦能夠即時檢查 GPU 的資源佔用,當沒有進程使用的時候自動開始挖礦;而在 TensorFlow、PyTorch 或其他工具需要開始計算的時候,監視器會發出命令讓電腦立即停止挖礦。


這個問題應該很好解決,但我至今未在網上發現類似的東西,所以我自己嘗試寫了一個 GPU 監視程式。它不僅適用於挖礦任務,而且還可以用於其他各種任務。


NOTE. 在開始之前,你必須明白:希望你不要把這種計算資源最佳化方法用在辦公室的電腦上,本人對於任何濫用造成的後果概不負責。


先決條件


首先,我的項目 gpu_mon 以及原始碼已經發布在 GitHub 上了:https://github.com/Shmuma/gpu_mon。

它由 Python 3 編寫,其後沒有標準庫之外的依賴庫,但它需要運行在 Linux 系統上,所以如果你的機器是 Windows 系統的話,抱歉了:)


gpu_mon 的運行邏輯如上所述:它會定期檢查 GPU 的負載,如果沒有進程使用的話,它會自動運行你在 config 檔案中選擇的程式。如果有其他程式開啟了 GPU,指定程式會被自動停止以釋放資源。所以在設定完以後,你只需要開啟監視程式,隨後像往常一樣使用即可,從運行挖礦程式到全速運行深度學習模型之間僅有幾秒鐘的轉換時間。


為了擷取接入 GPU 裝置的進程列表(假設是/dev/nvidia*),我們使用了 fuser 命令列工具。在基於 debian 的發行版上(如 ubuntu 或 debian),工具是由 psmisc 工具包提供的——它是系統安裝的一部分,所以沒有特殊的資產庫需要安裝。如果你的系統中沒有 fuser(你可以通過在 shell 上運行「which fuser」命令來進行檢查),則你需要事先安裝一下。


調試


整個項目的配置都是在一個單獨的設定檔中完成的,它是 ini 檔案格式,存在於~/.config/gpu_mon.conf 目錄中。樣本設定檔如下所示,同時在 GitHub 中也可以找到。


設定檔包含四個部分:


1. 預設全域設定 [defaults]。在這裡只有一個選項,它指定監視軟體對 GPU 裝置資源用量的檢查頻率。預設情況下,每十秒鐘檢測系統中的所有 GPU 一次。


2.GPU 設定可以用 gpu-首碼的方式指定任意 GPU。你也可以用 ID 將不同的 GPU 分組(/dev/nvidiaX 裝置檔案上的整數)。對於每個 GPU 組你都可以設定一個程式列表,其中列出不會搶佔挖礦任務的程式。這樣我們就可以應對 nvidia-smi 這樣的工具了——它會使用 GPU 裝置,但不應該妨礙挖礦。


3. 挖礦進程配置部分,可以使用 process-首碼的方式指定一個或多個。對於每個項目來說你可以指定需要啟動並執行挖礦程式,程式所在的目錄,限制挖礦程式利用 GPU 資源的程度(這是通過匯出 CUDA_VISIBLE_DEVICES 環境來完成的),記錄檔名稱以及挖礦程式輸出。


4.TTY 監控部分,他可以讓你選擇偽終端監控,優先於挖礦程式。在預設情況下,此選項是關閉的。

以下是我在一台雙 GPU 裝置上的挖礦設定檔案:


        

[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 上的挖礦程式都會被關閉。


正如之前所說的,一切都是透明的,你不應在開啟/關閉挖礦程式上耗費精力,只需要專註於 TensorFlow 和 PyTorch 上的最佳化即可。現在,你可以開始使用 gpu_mon,擷取利潤了。


自動開始 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_mon 被一個使用者開啟,而另一個或多個使用者開始調用深度學習軟體,則 gpu_mon 無法關閉挖礦程式。這是因為 fuser 命令受到安全限制——它無法向其他使用者的進程展示正在啟動並執行進程。如果你在多使用者的情況下仍然需要 gpu_mon(還請注意不要使用公用電腦做這種事),你有如下兩種選擇:


給 gpu_mon 以 root 許可權,這在任何情況下都不是推薦的方式。


給 fuser 二進位檔案加入 SUID bit。在 Ubuntu 發行版中,我們可以通過運行命令 chmod+s/bin/fuser 來完成,它可以有效地讓所有使用者訪問檔案,通過 SUID bit,二進位檔案是以檔案擁有者認證的形式啟動的,即使它是由其他使用者啟動的。但這仍然需要你開啟 root 許可權。


挖哪種虛擬貨幣。


目前,市面上存在多種虛擬貨幣,這要歸功於比特幣今年的繁榮。我個人最喜歡的是基於 equihash 的貨幣,像 ZCash 和 Komodo——它們都可以使用一種程式來挖礦。我是用 EWBF 挖礦程式的修訂版來做這個工作,它要比原版快上 10%。


連結:https://mega.nz/#!4iIClQ4D!tbff8HgrT5Pii8yMDXf9eZd5yFSrwOALHnjsaW7NlWU


正如前文所述,gpu_mon 本身不會挖礦,它只會跟蹤 GPU 進程,所以你可以使用任何 CUDA 最佳化的挖礦程式。


賺錢與否。


當然賺錢,但是不要指望使用一塊英偉達 GTX 1080 就能賺來百萬美元,虛擬貨幣的複雜性正在增長,但挖礦收入減去電費以後仍然是正數,所以何樂而不為呢。這裡有一個計算方法可以幫你估算挖礦收入、目前貨幣的複雜度、交易費用以及計算資源:https://whattomine.com/ (http://whattomine.com/)


總結


就是這樣。如果你覺得 gpu_mon 非常有意思,不妨給作者捐助一兩個比特幣,或者在 GitHub 上點個贊。


原文連結:https://medium.com/mlreview/using-your-idle-deep-learning-hardware-for-mining-c1b9887491fa


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.