golemでGPUを提供する

# 注意
本稿は実機のserverにinstallしている都合で実写の写真が多くなっています。
ご留意ください。

# 環境
CPU: Intel(R) Core(TM) i9-10900K CPU @ 3.70GHz
GPU: NVIDIA GeForce RTX 3070
Mem: 32G
Disk: SSD 240G, M.2 SSD 1T
Wallet: Metamask

# 要件
- CPUがIOMMU(IntelだとVT-d)に対応している。
- GPUがNVIDIAの3000番台で8GBのVRAM
- VRAMと同量のRAM,できれば倍以上
- 最低64GBのSSD,または高速USB(非推奨)
- 最低100Mbpsのネットワーク
- ETH walletを所有

# imageの作成
この作業はMacで行なっています。
webからimage fileを取得します。
```
$ wget https://gpu-provider.dev.golem.network/golem-gpu-live-latest.img.xz
$ gunzip golem-gpu-live-latest.img.xz
```

外付けSSDをMacに接続します。
私は下記のAmazonの商品を持っていたのでそれで接続しました。

https://www.amazon.co.jp/gp/product/B089F1WD5K/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1

DiskUtilityでSSDをformatします。
balenaEtcherを開き、SSDに`golem-gpu-live-latest.img`をflashします。
sizeが大きいとBalenaetcherが`Are you sure the selected drive is not a storage drive?`と聞いてくるので`Yes,I'm sure`と返しましょう。

# 起動
SSDをserverに接続し、電源をつけます。
自分はMouse PCで動作させているためDel key + Esc keyを連打してBIOSに入りました。
設定を確認するところが二つあります。
- UEFI bootが有効になっているか
- (Intelの場合)`Intel Virtualization Technology for Directed I/O (VT-d)`が有効になっているか
- (AMDの場合)`IOMMU`が有効になっているか
私の場合は元からUEFIだったので`VT-d`をenableにしました。
これを確認したら、rebootしてgolem-liveを起動します。

step1: `Welcom to the wizerd!`と表示されるので`OK`を押します。
step2: 利用規約に同意しろと出るので同意します。
step3: storage partitionを選ぶ画面になるため、storageを選択します。
       基本的には`root filesystem`以外を選ぶのが良いと思います。
step4: passwordが自動生成されるので保存しておきます。
step5: networkの設定をします。DHCPなら勝手に認識します。
step6: walletのaddressを入力します。
step7: 1時間ごとの値段を設定します。自分は0.015と安めに設定しました。
step8: GPUを選択します。ここで`IOMMU`を有効化しておかないと下記のようなerrorが発生します。
![IMG20240626003236.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632275/81c4cd93-4bed-72a6-7d52-be03129e6579.jpeg)
設定しておくと下記のように選択できるので選択してください。
![IMG20240626012710.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632275/9ca7fb38-95cc-81e0-e7e7-2f0127c7b5e6.jpeg)

これで完了です。

このあと、okを押すとrebootが実行されます。
その後は画面出力がなくなるのでipにsshして操作します。
ipとpasswordは先に出力されたもので、userはgolemです。

# 設定
sshして下記を実行してみましょう。
```
$ golemsp status
┌─────────────────────────────────┬──────────────────────────────────────────────────┬───────────────────────────┐
│  Status                         │  Wallet                                          │  Tasks                    │
│                                 │  0x****************************************      │                           │
│  Service      is running        │                                                  │  last 1h processed     0  │
│  New Version  0.15.2 released!  │  network               mainnet                   │  last 1h in progress   0  │
│  Version      0.3.0             │  amount (total)        0.103832940381894044 GLM  │  total processed       0  │
│  Commit       UNKNOWN           │      (on-chain)        0.000000000000000000 GLM  │  (including failures)     │
│  Date         2024-04-03        │      (polygon)         0.103832940381894044 GLM  │                           │
│  Build        420               │                                                  │                           │
│                                 │  pending               0 GLM (0)                 │                           │
│  Node Name    nyahahanoha-node  │  issued                0 GLM (0)                 │                           │
│  Subnet       public            │                                                  │                           │
│  VM           valid             │                                                  │                           │
│                                 │                                                  │                           │
│  Driver       Ok                │                                                  │                           │
└─────────────────────────────────┴──────────────────────────────────────────────────┴───────────────────────────┘
```
とまあ、このようにVersionがめっちゃ古いのでUpdateします。
```
$ golemsp stop
$ curl -sSf https://join.golem.network/as-provider | bash -

By installing & running this software you declare that you have read, understood and hereby accept the disclaimer and
privacy warning found at https://handbook.golem.network/see-also/terms

golem-installer: installing to /usr/bin
 Component                             Version
-----------               --------------------
golem core                              0.15.2 [done]
wasi runtime                             0.2.2 [done]
vm runtime                               0.3.0 [done]
golem-installer: to install to /usr/bin, root privileges required
cp: cannot create regular file '/usr/bin/yagna': Text file busy

                                             ```
                                             ```
                                             ```
                  ```                        ```
       `````````````        `````````        ```        `````````         ``````````````````
     ````      ```        ```       ```      ```      ```       ```       ```     ``     ```
     ``          ``      ```         ```     ```      ``         ```      ``      ``     ```
    ```          ``      ``           ``     ```     ```````````````      ``      ``     ```
     ``          ``      ```         ```     ```      ``                  ``      ``     ```
     ```       ```        ```       ```      ```      ```        `        ``      ``     ```
       `````````            `````````        ```        ``````````        ``      ``     ```
          ```
          ```               version: 0.15.2
       `````````
     ```       ```          commit: 64cdac0b
     ``          ``
    ```          ``         date: 2024-06-20
     ``          ``
     ````      ```          build: 456
       `````````

Initial node setup
Node name  (default=nyahahanoha-node):
Ethereum mainnet wallet address (default=0x096356379d4d2bb7ec0a6e8357729976653cc8b7):
Downloading certificates and whitelists                           [done]
```
yagnaを止め忘れたのでめっちゃ怒られてるけど、気にせずrebootしたら直ります。
rebootし終わると、versionが上がっています。
```
$ golemsp status
┌───────────────────────────────────┬───────────────────────────────────────────────────┬───────────────────────────┐
│  Status                         │  Wallet                                         │  Tasks                  │
│                                   │  0x****************************************     │                           │
│  Service      is running        │                                                   │  last 1h processed     0  │
│  New Version  0.15.2 released!  │  network                mainnet                 │  last 1h in progress   0  │
│  Version      0.15.2              │  amount (total)         0.103832940381894044 GLM  │  total processed       0  │
│  Commit       64cdac0b            │      (on-chain)         0.000000000000000000 GLM  │  (including failures)     │
│  Date         2024-06-20          │      (polygon)          0.103832940381894044 GLM  │                           │
│  Build        456                 │                                                   │                           │
│                                   │  pending                0 GLM (0)                 │                           │
│  Node Name    nyahahanoha-node    │  issued                 0 GLM (0)                 │                           │
│  Subnet       public              │                                                   │                           │
│  VM           valid             │                                                   │                           │
│                                   │                                                   │                           │
│  Driver       Ok                │                                                   │                           │
└───────────────────────────────────┴───────────────────────────────────────────────────┴───────────────────────────┘
```
表示がめっちゃ崩れてるけど、こうなる理由は分かりません。
node-nameを変更します。
```
$ golemsp settings set --node-name "node名"
```

変更し終わってある程度時間が経ったら、下記のURLを見に言ってnode名で検索をかけてみてください。
画像のような画面が見えるはずです。

https://stats.golem.network/network/providers/online

![スクリーンショット 0006-06-26 1.47.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632275/8ed81096-137b-f0e4-a59f-a2e974d67ab3.png)

できました。

# まとめ
私のようにgaming PCを買ったは良いけどインフラ構築が楽しすぎてgameをしなくなってしまった方はgolemに提供してみてはいかがでしょうか。

# 参考文献

https://docs.golem.network/docs/providers/gpu/gpu-golem-live

https://docs.golem.network/docs/providers/provider-installation

https://zenn.dev/190ikp/articles/vagrant_libvirt_gpu

https://stats.golem.network/network/providers/online