ぬうぱんの備忘録

技術系のメモとかいろいろ

作った曲一覧はこちら

Sonarworks SoundID Reference がよくわからんけど動作するようになった件

そもそも

  • いつのまにか Reference 4 の後継として SoundID Reference が出てましたね
  • 全然気づかなかったよ

やりたいこと

  • Windows の出音(ブラウザとかの非 DAW アプリから出てくる音)に SoundID Reference で補正をかけたい

環境

再現手順

  • Add new output で ASIO 系のドライバ(自分の環境の場合 Roland Rubix)を選択
  • Virtual Windows audio to ASIO driver を選択
  • 任意のヘッドフォンプロファイルを選択
  • ↓のエラーが出てくる
Unknown error while updating preset
There was a error while updating preset. Please try again.
  • Windowsサウンド設定を確認すると、なぜか SoundID の仮想ドライバがどこにも居ない

解決方法

  • Add new output で非 ASIO 系のドライバ(自分の環境の場合 スピーカー(Roland Rubix 44))を選択
  • [Beta] Windows audio device insert(APO) を選択
  • 任意のヘッドフォンプロファイルを選択
  • 今度は正常にキャリブレーションが効く

APO ってなによ

docs.microsoft.com

Windows 10 のオーディオストリーム上にインサート可能なソフトウェア DSP モジュールってことらしい。 DAW で master チャンネルに vst を刺すようなことが Windows 上でもできる、っていう理解で良さそう。

追記

その後 Windows がぶっ壊れてクリーンインストールして、バージョンが 20H2(Windows Feature Experience Pack 120.2212.2020.0) になったんですが、この環境だとむしろ APO が動かなくて Virtual Windows audio to ASIO にしたら動きました。

経緯

  • 元々 Reference 4 を使っていた

  • Windows 10 Insider Preview(dev ch.) に入っているせいなのか、ある日突然 Reference 4 が全く動かなくなった

    • よくよく調べると windowsサウンドバイス一覧に Reference 4 の仮想デバイスが存在してなかった
    • 多分、仮想デバイスが存在してないので途中で処理失敗してるんだと思う
  • しょうがないので Reference 4 を入れ直そうと思って Sonarworks の公式を覗いてみたら、いつのまにか SoundID Reference になってた

  • 一縷の望みをかけて 5000 円払って SoundID Reference のアプグレした

  • SoundID Reference でリトライするものの事態は全く改善しなかった

Unknown error while updating preset
There was a error while updating preset. Please try again.

って言われる。

  • ASIO じゃない方のデバイスの設定項目をよく見ると
[Beta] Windows audio device insert(APO)

ってあるので、ダメ元でこれを試してみたら、動いてしまった…。

Sonarworks Reference 4 の設定リセット方法

この記事は

  • Sonarworks Reference 4 で設定ファイルを削除して無理やりリセットする方法の解説です
  • Windows 10 の話です

なんでこんなメモを残したのか

  • Windows Insider Preview に入っている都合で windows 環境がものすごく不安定
  • ひっきりなしに更新が入っていろんな設定が吹き飛ぶなんて日常茶飯事
  • reference 4 が動かなくなることもよくある
  • 毎回設定ファイルのありかをググってる気がするので、いい加減自分用にメモしとこう <- イマココ

設定ファイルの場所

  • C:\Users\%USERNAME%\AppData\Local\Sonarworks\Reference 4\Systemwide\Systemwidecfg.db

感想

  • Insider Preview の dev チャンネルはマジで不安定なので、軽い気持ちで入ってはいけない。

参考

Train Supply Manager セットアップ手順書

# この記事は?

  • Factorio の MOD である Train Supply Manager(TSM) のセットアップ方法のメモです。

# バニラと比べた TSM のメリット

## TL;DR

  • 各列車が無駄に駅から出歩かなくなるので線路の混雑状況が緩和される

## 列車が無駄にうろつかない

  • バニラでも「供給駅:消費駅=M:N」の輸送網を Min(M, N) 台の列車で構築できる
  • ただし、1つの供給駅に複数台の列車が殺到して最初に到達した1台以外が途中で引き返すみたいな事が起きる
  • TSM は最低限の台数だけが向かうことになるので無駄に線路を専有したりしない

## スマートに燃料供給できる

  • バニラでは燃料補給駅をルートに組み込むことになる
  • この場合、燃料の残りとは無関係に一定間隔で燃料供給駅に通うことになる
  • なので、燃料供給駅が混雑する
  • TSM は燃料が減った時だけ燃料供給駅に行くので無駄がない

# 用語

## Supplier Train Stop = 供給駅

  • 資源を列車に積み込むための駅

## Requester Train Stop = 要求駅

  • 資源を列車から降ろすための駅

## Train Counter

  • Requester Train Stop に付いてくる専用の定数回路
  • 「ペアになっている Requester Train Stop に向かっている列車の数」が Trains on the way 信号として出力される

## Train Configuration Reader

  • なぞ

## Train Requester

  • Requester Train Stop と併設するモジュール
  • 見た目はライト
  • 列車を呼び出す条件をこのモジュールで記述する

## 燃料補給駅

  • 列車の燃料が切れそうな時に立ち寄る駅

# セットアップ完了時の ゴール状態

  • 列車は基本的に供給駅に停車している
  • 要求駅の荷降ろしチェストに空きができたら対応する列車がその駅に向かう
  • 機関車の搭載燃料が減ってきたら自動的に燃料補給駅に向かう

# セットアップの要点

## 供給駅

  • Supplier Train Stop を設置する
  • 名前は [sup]鉄板 みたいに「供給駅であることを表すラベル」+「資源名」にしておく
  • 画面左上の Opens TSM gui buttons をクリックするとメニューが出てくるので、設定が必要
    • Define supply sourcing priorities (オレンジの上矢印)でダイアログを開く
    • Resource Id の列に所望の資源がなければ追加する(2列とも同じ資源を設定する)
    • -- Select -- ボタンから紐付ける Supplier Train Stop を決定する

## 要求駅

  • Requester Train Stop を配置する
  • それに加えて以下の要素をつないだ論理回路を組む必要がある
    • 荷降ろしチェスト <--> 条件回路 <--> Train Counter <--> Train Requester
  • 荷降ろしチェスト
    • 設定無し
  • 条件回路
    • 貯蔵資源量が一定数を下回ったら P 信号を 1 で出力する
    • ここの「一定数」はチェストのスタック2行分くらいが無難か
  • Train Counter
    • 設定無し
  • Train Requester
    • ネットワークの条件は「Trains on the way < P」に設定する
    • Train Requester 選択時に画面左上に表示される Train Requester ダイアログの設定は Priority Schema の2つのボックスに要求する資源を設定しておけばOK
  • 名前は [req]鉄板 みたいに「要求駅であることを表すラベル」+「資源名」にしておく

## 燃料補給駅

  • 通常の駅を配置する
    • 名前は FuelStop1, FuelStop2, ... という感じで FuelStop の末尾に番号を設定する
    • 駅名末尾の番号は機関車(動力車)の台数を表す
    • ただし、ここで言う「機関車の数」というのは「進行方向に向いている機関車の数」のことを言っているので注意
    • 燃料の減少を検知すると TSM が FuelStop を臨時駅として追加してくれる
    • 例えば「機関車(前向き)、貨物車、貨物車、機関車(後ろ向き)」の4両編成の列車の燃料が不足すると FuelStop1 が臨時駅として追加される

## 列車

  • Supplier Train Stop に停車し続ける設定にしておく
    • 必要な行き先は TSM が動的に追加してくれる
    • 「暇な時にどこにいるべきか」だけを手動で設定するイメージ

# トラブルシューティング

## 列車が供給駅に停車せずに発車してしまう

  • 供給駅に到着した時点ですでに要求シグナルが出てるせいで積み込みを待たずに発車してしまう状況のこと
  • 以下の条件をすべて満たすと起きる
    • どれか一つの要求駅が常に要求条件を満たしている(e.g. 荷降ろし先のコンテナが空)
    • その貨物の運搬に割り当てられているすべての列車の貨物が空になっている
    • その貨物の運搬に割り当てられている列車数が少ない(2~3両くらい?)
  • 解決方法
    • 要求駅が列車を要求出来る間隔を制限する
    • 論理回路で頑張れば P シグナルをフィルタできる
  • メモ
    • 本当は供給駅からの発車に条件を付けたい(満載まで~、とか)が、それは無理だった

# 参考

note.com

drive.google.com

TUT Advent Calendar 2020 / 12 / 22

# この記事は

12/22 の記事です。

adventar.org

# お前誰?

OB です

# 本文

nu-pan.hatenablog.com

nu-pan.hatenablog.com

# ほかいろいろ

## なんで共有しようと思ったの?

docker コンテナで開発環境をパッケージングしてそれを windows 上でも動かしたいみたいな需要が計算機になんかやらせる系の人にはあるんじゃないかなって思いました(これは私の妄想です)。 正直に言うと、たまたまインストール手順をメモる動機があって、たまたまカレンダーが空いてたので急遽ぶっこみました。

## 昨日

我慢できなくて寿司屋に駆け込みました。

## リモートワーク

エンジョイしてます。 後のすべては NDA

## 音楽

今年に入ってやっと UK garage 系の良さがわかるようになってきた。 Sonarworks でヘッドフォンの音場補正をして 40Hz 近くまで聞こえるようになったおかげでサブベースを感じ取れるようになってやっと理解したみたいなところある。 あと foor のおかげ。

youtu.be

disclosure も良かったね。

youtu.be

多分去年末くらいから russian hardbass は継続的にアツい。 ロシア語のことは何もわからないけど特定の「きたないことば」だけは聞き取れるようになって大変つらい。

youtu.be

## アニソン

のうきんはよく考えると去年の曲だった。 いい曲。

www.youtube.com

クラブで酔っ払って感情になったオタクに「めっちゃいい曲なんすよ!」って推されたのを思い出してちょっとフフってなってます。 実際いい曲。

youtu.be

ヒーwみたいな声ネタとか、オケヒとか、コッッッッテコテで大好き。 ユーロビート、良いよね…。

youtu.be

## クラブ

パーティー自粛祭りで全然行けてないわね。 このご時世、新規開拓がやりづらいのが辛い…。 お店もぽつぽつと消えていってかなしい。 これは豆知識なんだけど、マスクを付けて飲酒して爆踊りすると呼吸が苦しくなります。

## ゲーム

配慮したレビューを steam に書いたら作者に捕捉された

そしてめっちゃコミュニティーアワードもらった。

steamcommunity.com

ちなみに僕が一番好きなレビューは外人兄貴の roses are red のやつです。

steamcommunity.com

Windows 上で Linux コンテナ動かして GPU を触る(vscode編)

# この記事は

  • 前回の続きです
  • Windows 上で動いてる vscode」から「WSL2 上の Ubuntu 上の docker 上のコンテナ」にリモート接続できますよっていう記事です

# TL;DR

# 事前条件

  • 前回の記事の環境構築が完了している
  • 要するにこんな環境
    • Docker on Ubuntu on WSL2 の環境が出来上がってる
    • Docker Desktop for Windows を使っていない

# vscode に拡張入れる

  • Windowsvscode `を開く
  • 「Rmote - WSL」拡張をインストールスル
  • vscode を閉じる

# ubuntu から code を起動

# おまけ:コンテナを起動して開く

※ Rmote-Containers の話なので主題じゃないけど一応書いとく

  • Ctrl+Shif+P でコマンド入れるヤツを出して「Remote-Containers: Add Development Container Configuration Files...」
    • 好きなコンテナを選ぶ
    • 成功すると .devcontainer が生成される
  • Ctrl+Shif+P でコマンド入れるヤツを出して「Remote-Containers: Reopen in Container」
    • windows 上の vsode クライアントが再起動する
    • .devcontainer の内容物の記述に従ってコンテナが起動される
    • 起動したコンテナ内で vscode のサーバーが立ち上がる
    • windows 上の vscode クライアントはこのサーバーに繋がっている
  • なので…
    • ターミナルを開くとコンテナにログインした状態でスタートする

# 注意点

  • code の第一引数でディレクトリを渡す事が大事
    • 指定しないと素の状態の vscode が立ち上がる

# 感想

  • この程度の分量なら単一記事でも良かったのでは

# 参考

Windows 上で Linux コンテナ動かして GPU を触る(環境構築編)

# この記事は

  • Docker コンテナから GPU 触りたい(CUDA)
  • これを Windows 環境で実現したい
  • 若干詰まったのでメモしました

# TL;DR

# なんで WindowsGPU コンテナ?

  • pythonGPU 使いたい(GPU バックエンドの numpy)
  • でも Windows 環境上で python を使いたくない(Intel MKL のバージョン不整合が原因で十時間単位で人生を食われてる)
  • ついでに python のパッケージマネージャ周りがアレなので仮想環境とかそういうの触りたくない
  • ということで docker コンテナ上でよしなにしたい

以下、環境構築の経緯。

# Docker Desktop for Windows を WSL2 対応させる

※はるか昔にやったのを思い出して書いてるので不正確かも - 前提 - はるか昔の更に昔に Docker Desktop for Windows はインストール済み - Windows update かけた後… - PC 再起動後に Docker くんに WSL2 対応を勧められた - 多分これ:WSL 2 対応 Docker Desktop for Windowsを使うための手順 - Qiita - 言われるがままに設定したらなんか WSL2 で動いてるっぽい感じになった - 本当かどうかわかんないけど警告とかは出なくなったして docker も動いてるので放置

※昔の話ここまで

# Windows Insider Program に参加

※過去1~2時間の出来事を思い出しながら書いている

  • 「設定 --> 更新とセキュリティ --> Windows Insider Program」
    • 色々登録して Dev チャンネルに設定
  • 「設定 --> 更新とセキュリティ --> Windows Update --> 詳細オプション」
    • Windows の更新時に他の Microsoft 製品の更新プログラムを受け取る」をONにする
  • 出てくる更新を全部入れる
    • つまりひたすら再起動
    • Insider Preview 有効化後の初回再起動は割と重いので注意
    • 特に最新の「Windows Subsystem for Linux Update」が入っていることが重要

# NVIDIA ドライバを Windows にインストール

※過去1~2時間の出来事を思い出しながら書いている

  • CUDA on WSL :: CUDA Toolkit Documentation
    • この手順でいう「Installing NVIDIA Drivers」の項目
  • いうて CUDA ZONE から最新の CUDA ドライバを入手してインストールするだけ
    • ただし、ダウンロードには nVidia Developer の登録が必要で、これがめんどくさかった
    • 登録情報の Organization の項目でちょっと悩んだけど Indivisual Developer でお茶を濁した

# WSL2 版の Ubuntu を動かす

※過去1~2時間の出来事を思い出しながら書いている

## Windows Store から Ubuntu をインストール

  • インストールが完了すると即 Ubuntu のコンソールが立ち上がる
  • ユーザー名とパスワードが要求されるので入れる(Ubuntu 上のユーザーアカウントを作成)

## WSL2 で動いてるかチェック(Windows から)

  • 管理者権限の cmd で以下のコマンドを実行
wsl.exe --list -v
  • 以下のような結果になるはず
  NAME                   STATE           VERSION
* docker-desktop-data    Running         2
  Ubuntu                 Running         2
  docker-desktop         Running         2
  • VERSION 列が 2 になってれば OK らしい

## WSL2 で動いているかチェック(Ubuntu から)

  • ubuntu 上で以下のコマンド
uname -r
  • ↓みたいな感じで結果に WSL2 がついてれば多分ダイジョブ
5.4.72-microsoft-standard-WSL2
  • 自分がやったときは最初 WSL2 がついてなかったけど PC 再起動したら何か付いた

## WSL2 になってない場合

  • wsl.exe --set-default-version 2 とか
  • wsl.exe --set-version (distro name) 2 とか
  • WSL2 を使用するように設定できるらしい
  • このコマンドどっかの手順で実行してるかも…

# docker 入れる

※ここからはメモしながら作業してる

## ubuntu 上で docker を入れようとした

  • 以下のコマンドを実行
curl https://get.docker.com | sh
  • そしたら↓って言われた
Warning: the "docker" command appears to already exist on this system.

If you already have Docker installed, this script can cause trouble, which is
why we're displaying this warning and provide the opportunity to cancel the
installation.

If you installed the current Docker package using this script and are using it
again to update Docker, you can safely ignore this message.

You may press Ctrl+C now to abort this script.
  • そんなバカなと思って docker コマンドを打つと
The command 'docker' could not be found in this WSL 2 distro.
We recommend to activate the WSL integration in Docker Desktop settings.

See https://docs.docker.com/docker-for-windows/wsl/ for details.
  • ちゃんと教えてくれるようになってるとか親切のデーモンかよ

## Docker Descktor for Windows で設定入れる

  • Docker Descktor for Windows の設定開く
  • General
    • Use the WSL 2 based engine にチェックは入ってた
  • Resource --> WSL Integration
    • いつの間にか Enable integration with additional distros: に Ubuntu が増えてた
    • 無効化されてたのでスイッチ入れる
  • Apply & Restart

## ubuntu で docker 呼び出す

  • 今度はいつものヘルプが出てきた

# nVidia Container Toolkit 入れる

## apt-get でサクッと入れる

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
curl -s -L https://nvidia.github.io/libnvidia-container/experimental/$distribution/libnvidia-container-experimental.list | sudo tee /etc/apt/sources.list.d/libnvidia-container-experimental.list
sudo apt-get update
sudo apt-get install -y nvidia-docker2

# docker のテスト

## まずは nginx

  • いつものこのコマンド
docker run -p 8080:80 nginx
Unable to find image 'nginx:latest' locally
docker: Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on 192.168.65.1:53: read udp 192.168.65.3:52374->192.168.65.1:53: i/o timeout.
See 'docker run --help'.
docker: Error response from daemon: open \\.\pipe\docker_engine_linux: The system cannot find the file specified.
See 'docker run --help'.
  • ???????????????????????????????????????????????
  • ちなみに PC を再起動しても改善しなかった

# docker トラブルシューティング

## Error response from daemon: open \.\pipe\docker_engine_linux: The system cannot find the file specified. · Issue #4495 · docker/for-win · GitHub

  • docker をリスタートしたら直ったって言ってる人が多数
  • Docker Descktop for Windowsデバッグメニューからリスタートして cmd から docker run -p 8080:80 nginx をリトライしたら通った…
  • ブラウザから http://localhost:8080 でアクセスできることを確認
  • ubuntu からでも全く同様に正常動作を確認
  • めっちゃモニョるけどまぁ動いたのでヨシ!
  • PC 起動後ちょっと待たないとダメ系の話なのかも

## ちなみに

  • cmd から run して Ctrl+C で抜けたらコンテナが終了せずに残ってた
  • ubuntu から run して Ctrl+C で抜けた場合はちゃんとコンテナ終了してた
  • 怖すぎる

# docker のテスト(再)

## まずは nvidia-smi

  • 以下のコマンド
docker run --gpus all --rm nvidia/cuda:9.0-base nvidia-smi
  • ubuntu 上で実行したら
docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].
  • cmd から実行したら
docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].
  • はい

# なんでダメ?

## 多分 docker が Docker Descktop for Windows なのがダメ

  • Ubuntu に docker を入れないとダメ
  • 上手くいってる記事では Docker Descktop for Windows を入れていない

## しょうがないので

  • Docker Desktop for Windows を消して途中からやり直す
  • Windows からコンテナを立ち上げたいという欲求が微塵も無いってのも理由の1つ

# ついでなので Hyper-V を無効化

## やりかた

  • Windows の機能の有効化または無効化」で「Hyper-V」のチェックを外す

## なんで?

  • もともと Hyper-V で docker 使ってた民だったので「Hyper-V」を有効化する必要があった
  • でも WSL2 ベースの Docker は「仮想マシンプラットフォーム」のほうが必要で「Hyper-V」は不要
  • なので先に関連の設定を全部クリーンにしてからインストール手順を進めたい

## 注意

  • Windows の機能の有効化または無効化」上の機能名としての「Hyper-V」は WSL2 では不要という意味
  • 技術名としての「Hyper-V」は WSL2 でも使ってる

# Docker Desktop for Windows を削除

  • フツーに「アプリと機能」から削除
  • 終わったら一応 PC をリブート

# Ubuntu のセットアップをやりなおす

## docker があるかチェック

  • docker で思いっきりヘルプ出てきたし
  • でも docker run nginx はデーモンにつながらないって言われる
  • パッケージ調べると
$ apt list --installed | grep docker

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

docker.io/focal-updates,focal-security,now 19.03.8-0ubuntu1.20.04.1 amd64 [installed,automatic]
nvidia-docker2/bionic,now 2.5.0-1 all [installed]
  • nvidia-docker2 のせいっぽいので関連含めて一旦削除
sudo apt remove nvidia-docker2
sudo apt autoremove
  • これで docker コマンドが消えた

## Ubuntu に docker 入れる

  • 以下のコマンドをありがたく使わせてもらう
curl https://get.docker.com | sh
  • やめよ? って言われたけどそんなん知らんわ! Docker Desktop for WindowsGPU 使えないからやっとるんじゃい
WSL DETECTED: We recommend using Docker Desktop for Windows.
Please get Docker Desktop from https://www.docker.com/products/docker-desktop
  • (将来的には Docker Desktop for Windows 上でも GPU コンテナ動くのかもだけど、その時に環境作り直せば良いやと思っている)
  • 20秒待つとインストールが完了する
  • ついでなので sudo なしで run できるようにしておく
sudo usermod -aG docker <USERNAME HERE>

## nvidia-docker2 を入れる

  • リポジトリの設定はすでにやってるのでスキップ
  • 以下のコマンドだけ
sudo apt update
sudo apt install nvidia-docker2

## まずは nginx

  • これ
docker run -p 8080:80 nginx
  • 問題なく通った

## 次は nvidia-smi

  • 以下のコマンド
docker run --gpus all --rm nvidia/cuda:9.0-base nvidia-smi
  • 失敗した
$ docker run --gpus all --rm nvidia/cuda:9.0-base nvidia-smi
Unable to find image 'nvidia/cuda:9.0-base' locally
9.0-base: Pulling from nvidia/cuda
be8ec4e48d7f: Pull complete
33b8b485aff0: Pull complete
d887158cc58c: Pull complete
05895bb28c18: Pull complete
84ba571a9830: Pull complete
dcfa08e04229: Pull complete
0ae7d70a879e: Pull complete
Digest: sha256:0ae476107c47e56c258414c46300ae3fdca03a3bb955665d40a4dde1e5a60ad4
Status: Downloaded newer image for nvidia/cuda:9.0-base
docker: Error response from daemon: OCI runtime create failed: container_linux.go:370: starting container process caused: exec: "nvidia-smi": executable file not found in $PATH: unknown.
  • 単に nvidia-smi が無い?

## 気を取り直してベンチマーク

  • 以下のコマンド
docker run --gpus all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark
  • 動いた(めっちゃニッコリしてます)
$ docker run --gpus all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark
Unable to find image 'nvcr.io/nvidia/k8s/cuda-sample:nbody' locally
nbody: Pulling from nvidia/k8s/cuda-sample
22dc81ace0ea: Pull complete
1a8b3c87dba3: Pull complete
91390a1c435a: Pull complete
07844b14977e: Pull complete
b78396653dae: Pull complete
95e837069dfa: Pull complete
fef4aadda783: Pull complete
343234bd5cf3: Pull complete
d1e57bfda6f0: Pull complete
c67b413dfc79: Pull complete
529d6d22ae9f: Pull complete
d3a7632db2b3: Pull complete
4a28a573fcc2: Pull complete
71a88f11fc6a: Pull complete
11019d591d86: Pull complete
10f906646436: Pull complete
9b617b771963: Pull complete
6515364916d7: Pull complete
Digest: sha256:aaca690913e7c35073df08519f437fa32d4df59a89ef1e012360fbec46524ec8
Status: Downloaded newer image for nvcr.io/nvidia/k8s/cuda-sample:nbody
Run "nbody -benchmark [-numbodies=<numBodies>]" to measure performance.
        -fullscreen       (run n-body simulation in fullscreen mode)
        -fp64             (use double precision floating point values for simulation)
        -hostmem          (stores simulation data in host memory)
        -benchmark        (run benchmark to measure performance)
        -numbodies=<N>    (number of bodies (>= 1) to run in simulation)
        -device=<d>       (where d=0,1,2.... for the CUDA device to use)
        -numdevices=<i>   (where i=(number of CUDA devices > 0) to use for simulation)
        -compare          (compares simulation results running once on the default GPU and once on the CPU)
        -cpu              (run n-body simulation on the CPU)
        -tipsy=<file.bin> (load a tipsy model file for simulation)

NOTE: The CUDA Samples are not meant for performance measurements. Results may vary when GPU Boost is enabled.

> Windowed mode
> Simulation data stored in video memory
> Single precision floating point simulation
> 1 Devices used for simulation
MapSMtoCores for SM 7.5 is undefined.  Default to use 64 Cores/SM
GPU Device 0: "GeForce RTX 2070" with compute capability 7.5

> Compute 7.5 CUDA device: [GeForce RTX 2070]
36864 bodies, total time for 10 iterations: 58.368 ms
= 232.824 billion interactions per second
= 4656.487 single-precision GFLOP/s at 20 flops per interaction

# 感想

  • ほんとに動いたよ
  • あとは vscode との連携だけが問題

# 参考

ローカルマシン上でコンテナ立てて localhost で http アクセスしようとすると失敗する

状況

-p で 80 番をフォワーディングしてるのに curl で http リクエストを投げても繋がらない。

PS C:\workspace\factorio_server_builder\base_image> docker run -d -p 80 nginx
ad0a9fbdf0521c887f56778f325e08c76e52d4ab7d781fa6f5bd306db957d5d5
PS C:\workspace\factorio_server_builder\base_image> docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
ad0a9fbdf052        nginx               "/docker-entrypoint.…"   6 seconds ago       Up 5 seconds        0.0.0.0:32770->80/tcp   loving_satoshi
PS C:\workspace\factorio_server_builder\base_image> curl http://localhost
curl : リモート サーバーに接続できません。
発生場所 行:1 文字:1
+ curl http://localhost
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest]、WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

--net=host でもダメ。

PS C:\workspace\factorio_server_builder\base_image> docker run -d --net=host nginx      
0f853bf9be02cfc2ee8e3d066eb56df24a1142a8c472358679fc838f38f1beb7
PS C:\workspace\factorio_server_builder\base_image> docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
0f853bf9be02        nginx               "/docker-entrypoint.…"   14 seconds ago      Up 13 seconds                           brave_hamilton
PS C:\workspace\factorio_server_builder\base_image> curl http://localhost
curl : リモート サーバーに接続できません。
発生場所 行:1 文字:1
+ curl http://localhost
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest]、WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

解決方法

-p 80:80 みたいに、ホスト側ポート番号を省略せずに書く。

PS C:\workspace\factorio_server_builder\base_image> docker run -d -p 80:80 nginx
PS C:\workspace\factorio_server_builder\base_image> docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                NAMES
6e0adde1c3b4        nginx               "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp   vigilant_gould
PS C:\workspace\factorio_server_builder\base_image> curl http://localhost


StatusCode        : 200
StatusDescription : OK
Content           : <!DOCTYPE html>
                    <html>
                    <head>
                    <title>Welcome to nginx!</title>
                    <style>
                        body {
                            width: 35em;
                            margin: 0 auto;
                            font-family: Tahoma, Verdana, Arial, sans-serif;
                        }
                    </style>
                    <...
RawContent        : HTTP/1.1 200 OK
                    Connection: keep-alive
                    Accept-Ranges: bytes
                    Content-Length: 612
                    Content-Type: text/html
                    Date: Sat, 29 Aug 2020 09:25:21 GMT
                    ETag: "5f32b03b-264"
                    Last-Modified: Tue, 11 Aug 2020 ...
Forms             : {}
Headers           : {[Connection, keep-alive], [Accept-Ranges, bytes], [Content-Length, 612], [Content-Type, text/html]...}
Images            : {}
InputFields       : {}
Links             : {@{innerHTML=nginx.org; innerText=nginx.org; outerHTML=<A href="http://nginx.org/">nginx.org</A>; outerText=nginx.org; tagName=A; href=http://nginx.org/}, @{innerHTML=nginx.com; innerText=nginx.com;  
                    outerHTML=<A href="http://nginx.com/">nginx.com</A>; outerText=nginx.com; tagName=A; href=http://nginx.com/}}
ParsedHtml        : System.__ComObject
RawContentLength  : 612

なんで?

ホスト側ポートを省略した場合 docker が適当に決めるらしい。 windows は犯人ではない。

ちなみに…

vscode の Remote - Containers 環境で作業してる場合 container.jsonforwardPorts 要素を使える。

{
  "name": "ubuntu",
  "build": {
    "dockerfile": "Dockerfile"
  },
  "settings": { 
    "terminal.integrated.shell.linux": "/bin/bash"
  },
  "forwardPorts": [80]
}

どうも、この forwardPorts の挙動はあやしい。 runArgs を使って -p=80:80 を直接書いたほうが良い。

  "runArgs": ["-p=80:80/tcp"]

参考

qiita.com