2021年4月8日木曜日

Radeon RX 6800 XT の OpenCL を有効化する

Radeon RX 6800 XT で OpenCL プログラムを動かそうとすると、OpenCL プラットフォームとして同 GPU が列挙されてこなかったので、調べたら、レジストリをちょっと弄る必要があるっぽい。どうやら OpenCL プログラムはこのキーから OpenCL プラットフォームの実装を見つけてるようだ。


Radeon のドライバをインストールもしくはアップデートしたタイミングで、以下のようなディレクトリ、ファイルができる。

C:\Windows\System32\DriverStore\FileRepository\*.inf_amd64_*\amdocl64.dll


amdocl64.dll のフルパスが確認できたら、 regedit.exe を起動して、 コンピューター\HKEY_LOCAL_MACHINES\SOFTWARE\Khronos\OpenCL\vendors に、以下のキーを作成する。

  • 名前: 上記 amdocl64.dll のフルパス
  • 種類: REG_DWORD
  • データ: 0x00000000 (0)
このキーを作成した後に OpenCL を利用するプログラムを実行すると、 Radeon GPU が OpenCL デバイスとして認識される。もし認識されない場合は amdocl64.dll へのパスがおかしいとか、過去のドライババージョンの amdocl64.dll へのパスになっていないかを確認するとよさそうだ。

手元で Radeon のドライバを更新するたびにコレでひっかかってる気がするが、どうしてドライバのインストール時に自動的にやってくれないのかねえ。何も見ずに何すればいいか思い出せるほどの頻度でやることではないが単純作業ではあるので、いっそのことツールなど書いて自動化すると幸せかもしれない。。。

2021年3月14日日曜日

ゲーミングディスプレイは本当に役に立つのか?

2021年にもなって、久々にFPSとしてApex Legendsをプレイしている。ヘタクソなのはそうなのだが、恐らくこの半年間でPS4 Pro/PC版あわせて700~800時間はプレイしているはずだ。久々にFPSをプレイしているので、ゲーミングディスプレイを試して、比較してみることにした。

ゲーミングディスプレイに対する謳い文句への懐疑感


これまで LG 27UD55-BK と LG 27UL850-W (どちらも 27インチ4K液晶)をデュアルディスプレイにしていて、このうち、 2020 年に購入した 27UL850-W をゲームプレイに使用していた。このディスプレイはどちらかと言えば発色などがキレイなことがウリだ。

もちろんリフレッシュレート60Hzの液晶ディスプレイが十分だとは思っていなかった。もともと私は初めてのFPSといえば液晶ディスプレイが普及する前である1990年代の初代DOOMだし、また2000年前後は三菱のダイアモンドトロン管ディスプレイ RD17V で、100Hz 程度のリフレッシュレートでFPSを遊んでいた経験があるので、液晶ディスプレイかつ60Hzが大きな制約であることは理解していた。敢えていえば液晶になる前なら100Hz程度は当たり前だった。また最近のトレンド Oculus Rift などのヘッドセットを見ていても、60Hz では不足だが 90Hz もあれば脳を騙せることが知られているので、60Hzで足りなくても、100Hzぐらいの頻度で更新されれば十分だろうと思っている。

しかし、周りのプレイヤーからは「60Hzよりも高リフレッシュレートのほうがよい」だけで終わらず、「敵レジェンドが止まって見える」「ディスプレイを変えるだけでキル数が増える」などという主張をされるし、販促ビデオでは相手より素早く反応できると謳われている。果たして、そこまでの効果があるのだろうかと、懐疑的に思っていた。

買おうと決意したものの、欲しいものの在庫がない


とはいえ、そろそろゲームに適したモニタが欲しくなってきた。コロナ禍でほとんど外出することもなく、スノーボードは2シーズン連続でスルーしており、月々の大きな支出としては家賃とメシ代(自炊するようになったため2年前の1/4〜3/1ぐらい)ぐらいなのだ。この半年で FPS を500時間以上プレイしているのだから、多少投資してもいいのではないだろうかと。

実は 11 月頃にゲーミングディスプレイの購入を決意したが思ったようなモデルがなく、2月に ASUS が発表した XG27UQ (4K 144Hz)をバックオーダーしている状態である。手元の古いLG 27UB55(27インチ 4K)で何十秒も残像が出る不具合が出ているので、買い換えるなら、同じ利用感で仕事にも使えるゲーミングディスプレイを、と思い、このモデルにたどり付いた。

しかし、昨今の自動車をはじめとする部品不足問題のためか中々納期が確定せず、少なくとも3月中にも手に入らないことがほぼ確定的になった。この機種に限らず、ある程度スペックや型番にこだわりを持って液晶ディスプレイを購入しようすれば、流通量の少なさにすぐ気づくだろう。正直なところ現時点で表示されている納品時期が守られるのかも判らない。

とりあえず、繋ぎのつもりで買ってみた


今回は MSI Optix G241 を購入してみた。スペックを妥協して市中在庫から選べば3万円でお釣りがくる価格感だ。半年近く「ゲーミングディスプレイの在庫がネェ……」と考える日々が続いていたことを考えたら、さっさと買ってしまったほうが精神的に良かったのではないかとさえ思える。

中途半端なものを買いたくなかった最大の理由は、設置場所の都合だ。27インチ×2+MacBook Proでギリギリだったが、やむを得ず、なんとか3枚目のディスプレイを追加した。ディスプレイアームに載せてあるので利用シーンによってある程度片付けたり引っ張り出したりはできる状態にある。

とりあえずの印象


早速 Optix G241 を Windows PC に繋げてみると、マウスカーソルの動きがかなり滑らかになった(というか見える残像が増えた)のはすぐわかり、印象的だった。ウインドウのドラッグなども全体的に滑らかになっているのもわかる。

Forza Horizon 4 を動かしてみると 60Hz と 144Hz では高速道路を高速巡航しているときに横を流れていく鉄柱の滑らかさが印象的だった。

過去に多少試したことがある Aim Lab を改めて試してみると、これまで 30,000 点ちょっとの印象だったテストで 50,000 点台が出てきて驚いた。ただ、ディスプレイの変更だけでなく自分のプレイスキルの向上もあると思うので、そこは考慮しないといけない(特に最近は Apex Legends の仕様アップデートに伴いウイングマンでの練習をはじめている)。


ゲーミングディスプレイによるメリットはこの時点である程度体感できていたが、もう少し定量的に比較してみることにした。

比較環境のセットアップ


今回は GPU (Radeon RX 6800 XT)から、これまで使っていた 27UL850-W (60Hz 4K 5ms) と今回の Optix G241 (144Hz FullHD 1ms) を DisplayPort で同時接続し、 Windows の機能で両方のモニタに映像をミラーする。なお、 Windows の機能で画面をミラーした場合に遅延が増加するかどうかは判っていなくて、この部分を定量的に測定する方法を持っていないので、この観点については無視する。

フレッシュレートは各ディスプレイの最大値が適用されているので、従来のディスプレイでは 60Hz 、ゲーミングディスプレイでは 144Hz で表示される状況となる。これで、どちらを見るかだけで利用できるディスプレイをスイッチできる環境ができた。

定量的に比較できるように、引き続き Aim Lab を使って、プレイ中のディスプレイの表示状況をデジタルカメラのビデオ撮影機能で 60FPS 撮影し比較することにした。ディスプレイの前に三脚を立てて、富士フィルムのX-T3カメラで両方のディスプレイを撮影できるようにした。ひとつのカメラのセンサで両方のディスプレイの出力映像を記録することで、1コマ単位で見比べて比較できる。

もちろん、本来 60Hz と 144Hz の違いを検証するのなら 60FPS では不十分だ。少なくとも 144Hz の倍の 288Hz(FPS) 前後のフレームレートで撮影したほうがいいだろうが、私はそこまでの機材は持っていないから、手持ちの機材でできる範囲での検証とする。


写真左側が LG 27UL850 、右側が MSI Optix G241だ。

なお、正面からの撮影ではないとはいえ、この写真で見ればわかるとおり、発色については Optix G241 に対して 27UL850 のほうが圧倒的にキレイだ。手元で試している限り、 27UL850 と比較できる環境で見れば、 Optix G241 は全体的に色褪せて見える(色温度などの設定でカバーできる範囲ではない)。これらは両方とも IPS パネルだ。


応答速度を比べてみる


とりあえず動画撮影をしながら、両方のモニタで Aim Lab を比較してみたところ、今回購入した G241 のほうがボヤケが明らかに少ないことがわかった。このため目が疲れにくい印象を受けた。これは動画からフレームを切り出してみても判る。


この写真では下にあったターゲットをエイムしてから上にあるターゲットに移ろうとしているが、その際に27UL850ではひとつ前のフレームが残像として映っている。実物では、この残像がボヤけに見えている。Optix G241では、この残像感がとても抑えられている。60Hz 5msのスペックを謳うディスプレイの残像は、デジタルカメラを用いて60フレーム/秒で撮影したレベルでも十分に記録できるほどだった。

表示遅延を比べてみる


録画を確認するとOptix G241のほうが常に若干新しいフレームが描画されていると感じられる。実際には144Hzのリフレッシュレートで更新されていることもあり、操作に対してダイレクトにフィードバックがかかるので、エイム操作がしやすくなる感覚はあった。

動画の各フレームを確認していくと、以下のフレームが見つかった。28UL850では過去のフレームに対して新しいフレームが表示されようとしており、Optix G241ではより新しいフレームが表示されている。


どちらのディスプレイでも、いちばん右のターゲットにはこれから表示される武器の陰がかぶっているが、このかぶり方が非常に似ているのは面白いポイントだと思う。144Hzのほうが明らかにより新しいフレームが表示されている。しかし、60Hzモニタは更新頻度が低いとはいえ、特別に遅延が大きいわけではないようだ。

遅延がどれぐらいあるかはカウントダウンの瞬間などを比較するとわかりやすい。5,4,3...とカウントダウンがなされる時の60Hzディスプレイでの描画の遅れは、表示開始までの遅延は1フレーム(16.6ms)前後、表示が安定するまで2フレーム(32.2ms)未満だった。



1/144秒毎に更新されているディスプレイとの比較として考えると、1/60秒毎にしか更新されておらず、画面の残像感が1フレーム分残る液晶パネルであることを考慮すれば、妥当な挙動だ。32.2msはデジタルカメラの撮影機能が60FPSであることから想定した最悪値だ。実際の遅延はこれより少ないだろう。

ゲーミングディスプレイの宣伝文句は本当か?


ゲーミングディスプレイの宣伝文句として「フレームレートが高いほど、相手がより早く見える」といった表現がされていたり、それをイメージさせるデモ映像がある。

今回の比較を見る限り、あの宣伝文句はかなり大げさな表現だが、一般的な 60Hz ディスプレイと比べれば確かに10~20ミリ秒ほど早く画面上に敵が映り込んだり、より新しい位置に敵が見えたりするのは事実だろう。

とはいえ、10ミリ秒を切ってくると現在のインターネットにおけるピア間の遅延のほうが大きくなりうるし、それをごまかすための補間や予測などもされているわけなので、まあ、そうね、というレベル感で捉えている。

実際のゲームだとどうなる?


同じように Apex Legends でダミー撃ちする映像をフレーム単位で見てみたが、複雑なApex Legendsの画面は144Hzを60FPSで録画しても、複数フレームが同時に映りこんで逆に破綻した画像になってしまった。体感と異なり144Hzの画像のほうが見づらく、紹介に紹介するような内容にならなかったので、ここでは省略する。

感覚的には、マウス操作による視線移動が発生した場合にダミーや周りの景色がはっきり見えることにより、プレイしやすくなると感じた。

ゲーミングディスプレイはゲーミングディスプレイだった


今回、はじめて60Hzを越えるリフレッシュレートに対応した液晶ディスプレイを買ってみたが、ゲーム画面が見やすくなるなどのメリットが確認できた。特に、 FPS のように視点移動によって画面の表示が大きく変化するようなゲームでは、残像感が大幅に減少するため、疲れにくくなりそうだ。

まだ「ゲーミングディスプレイにするだけでキル数が伸びる」かどうかはわかっていないが、ぼちぼち実践で試してみようと思う。

2021年1月16日土曜日

コロナ禍でやっと自宅ごはんが定着してきたアラフォーのキッチン環境の話

自炊なんてする気はまったくなかったのに、コロナウイルスのせいで日々の95%の食事が自炊になってしまった。まあ、自炊と言えるほどのしっかりした自炊でもないので、敢えて自宅ごはんと書くことにしよう。

コロナウイルスが話題になりはじめてからの直近1年弱で、購入してよかったと思えるキッチン用品などを挙げてみる。


冷蔵庫: SHARP SJ-GW41F

シャープ SHARP プラズマクラスター 冷蔵庫 どっちもドア(両開き・ガラスタイプ) 幅60.0cm スリムタイプ 412L 5ドア ホワイト SJ-GW41F-W

最近まで、2004年の就職のタイミングで購入した130L台の小さな冷蔵庫を使っていたが、日常的に自宅で食事を準備しようとすると、容量的にはかなり不満を感じるサイズだった。また、1-2年前から変なリレー音が聞こえるようになっていたので、冷蔵庫を買い換えたいと思っていた。

ペットボトル等の飲料類がたくさん冷やせることを求めると観音開きは自分に向いていない気がして、また転居の際にもドアの方向がネックにならないようにと考えてシャープの両開きドアにした。別にもっと大きいサイズの冷蔵庫でもいいかなと思ったけど、412Lであれば当面は不自由ないだろうし、横幅600mmであれば転居の際に冷蔵庫の設置場所が制約事項になることはないだろう、という判断でこのサイズに決めた。


しばらく使ってみて感じるのは、もっと冷凍スペースが大きくてもいいかな、という事。冷蔵庫が割とスカスカで、冷凍庫の利用率が非常に高い(後述するエアオーブンが非常に便利だからだ。冷蔵庫とエアオーブンの相乗効果とも言えるかもしれない)。


水切りラック: ヨシカワ 1306081

ヨシカワ 日本製 水切りラック シンクサイド 幅の広がる 2段水切り 15~27.5×57cm 1306081

キッチンの左側スペースに余裕があったので、この奥行きにあわせた水切りラックを購入した。二階建てで、自炊初心者には贅沢すぎるようなサイズである。

後に包丁ホルダーも購入した(同社製品もあるが、私は他社製品を組み合わせている)。これをつけて以降、メインの包丁の定位置はココになった。外れて危ないのではないかと言われることがあるが、インシュロックで固定してあるので、震度7の地震でラック全体がひっくり返る状況でもなければ包丁が飛び出すことはない。


食器棚を持っていないためシステムキッチンの収納スペースしか食器や調理器具の格納場所がなく不便なので、褒められた状況ではないが、水切りラックにモノが残りがち。その状況で、このサイズ感はとても便利に使っている。

この水切りラックはいまの賃貸物件のキッチンの作りにぴったりな仕様のものにしてしまった。日本メーカー製で比較的高級ナモノだけど、将来引っ越しをしたときには、この水切りラックがうまく使えないかもしれない。でもいまのキッチンでの日々が幸せだから、それはそれでいい。


炊飯用の鍋: ストウブ ココットでゴハン S

staub ストウブ 「 ラ ココット de GOHAN ブラック S 12cm 」 ご飯鍋 炊飯 1合 鋳物 ホーロー 鍋 炊飯器 【日本正規販売品】 La Cocotte de GOHAN 40509-653

何年か前に、購入から15年ほど経過した炊飯器の蓋部分が壊れてしまい、それ以後自宅で炊飯できなくなっていた。新しい炊飯器はコレを買う1年前ぐらいから探しはじめていて、ふるさと納税で入手しようかとか、折角だから美味しく炊ける炊飯器がいいなとか色々と考えて市中のラインナップを見ていたのだが、特に美味しそうに炊飯できそうなのはファミリー向けサイズで、私のような独身にちょうど良さそうなサイズのものはあまり選択肢がないと感じていた。

このホーロー鍋に水 200ml と米 1合をいれてしばらく時間をおいた後、ガスコンロ強火で一気に沸騰させて、沸騰したら一度全体をかき混ぜ、蓋をして弱火に。5分後に火を止めたら10分ほど蒸らし、食べられる。炊飯にかかる手間は、強火の間の数分間と、キッチンタイマーからの割り込みが発生した瞬間だけ。平行で洗い物などをしているとこの時間はロスには感じないし、炊飯器での炊き上がりまで数十分待っていた頃がバカらしくなる手軽さである。

米はゆめぴりかの無洗米を使っているので、といではいない。とぐ手間が発生すると自分的にはかなりハードルが上がるかなと思う。毎回1合で炊いているが、大抵は0.5合ぐらいでよかったりもするので、半分はジップロック容器に移して冷凍している。冷凍された米は容器から出してジップロック袋に移し、過去に炊いたが食べていない米はストックしている。本当にすぐに食事にありつきたい時などは、このストックが活躍している。

このホーロー鍋は底の径がかなり小さいので、標準的なガスコンロでは標準の五徳に乗らない。このため、小さい鍋などが載せられる五徳を併用している。

パール金属 五徳 ブラック 外径14cm 鉄鋳物製ミニ ホーロー加工 フェール HB-4198

実はいま使っているのはふたつ目。洗い物を終えた後にガスコンロで加熱して乾かしたりしていたのだが、ひとつ目の個体を加熱しすぎて底を割ってしまったので、二つ目を購入した。空焚きしてはいけないのだが、温度センサーつきのガスコンロだから大丈夫だろうと油断していたら破損してしまった。まあ底が割れていても使っていいみたいだけども、表面のガラス質が欠けていてカケラを食べるるのは気持ち的に嫌だし、錆びやすくもなっており扱いが面倒で、買い直した。


包丁: 京セラ セラミックナイフ

京セラ 包丁 ファイン セラミック 三徳包丁 16cm グリーン 漂白 除菌 対応 無料研ぎ直し券付 Kyocera FKR-160GR

これまで2000円程度の包丁を使っていて、研いでみたりもしたけども、やはり慣れていない人間が研いでもなかなか切れるようにはならなかった。このセラミックナイフは今のところ非常に快適に利用できている。タマネギを切っていても目が痛くならないだけでも大変助かっている。固い食材に対してだと刃が欠けたり、捻ると割れたりというリスクはあると思うが、そういう事はしないように注意している(場合によっては古い包丁を併用)。


エアーオーブン: レコルト Air Oven エアーオーブン ノンフライヤー RAO-1 

レコルト Air Oven エアーオーブン ノンフライヤー RAO-1 レッド

妹の家で、フィリップス製のノンフライヤーでフライドポテトをさくさくっと作っているのを見て、ノンオイルフライヤーは便利で良さそうだなと思っていた。ただ、フィリップス製のノンオイルフライヤーはもう廃番になっており、中古品しか市中では見かけないので、代わりになるものを探していた。グリルやオーブンレンジの代替として利用しているが、かなり手軽に使えるので気に入っている。購入してからの利用頻度は当初を想像を大幅に超えて高い。

このモデルは、ノンオイルフライヤーというよりは、製品タイトルにあるとおりエアオーブンだ。中に電熱器とファンが入っていて、稼働中に空気をかき混ぜる仕組みになっている。フィリップスの本物なノンフライヤーは掃除機並の音を出していた(それぐらい空気を高速に循環させている)が、この製品はそこまでのものではない。

本物のエアフライヤーと比べれば格段に静かなので集合住宅で真夜中に使っても迷惑をかけない点はメリットだが、ノンフライヤーとしてはパワー不足。空気をかき混ぜてくれて、しみ出した油分がカゴの底に貯まるオーブンだと捉えたほうがいい。他の製品と比べると角張っているので、洗い物はしやすい方で、それが頻繁に利用する上で心理的障壁を下げているように感じる(その代わり空気の循環がトレードオフになっているかもしれない)。

電子レンジのオーブン機能で冷凍フライドポテトを加熱するのが地味に手間だが、これを使うととても簡単だ。魚の切り身を焼くのにも使える。コンロのグリルを使わなくてもいいので掃除する場所も減る(私は、もうグリルを使うことはないと思って、排気口を封印してしまった)。冷凍唐揚げは、一度油で揚げられたモノはうまくいくが、揚げる手前で冷凍された唐揚げには対応できないと思ったほうがいい。ノンフライヤーとしての機能を求めるなら、たぶん他にもっといいモデルがあるだろう(買い換えてもいいかもしれない)。


PVCキッチンマット

キッチンマット クリア PVC 45×180cm 厚さ1.5mm クリアマット 台所マット 透明マット ソフト 撥水 おしゃれ 汚れ防止 お手入れ簡単 床暖房対応 滑り止め (180*45cm)

今回のキッチンでは、PVCの透明なキッチンマットを使用している。液体をこぼしても、モップで拭き取るだけで済む。物件の床を汚さないで済むし、洗濯機で洗わなくても簡単に掃除できるのがとても便利。今後も同じようなものを使い続けるだろう。


これを言ってしまうと身も蓋もないシリーズ1: 広いキッチン

最後に、装備というよりは環境的要素について。フルサイズのキッチンは本当に便利だ。自炊慣れしていないシロートの私のような存在にとって、横幅1メートルにコンロと流し台が集約されているようなユニットキッチンでの料理は、経験がない上でハンデを背負わされているようなものだ。広いキッチンがあるだけで、自炊の難易度はガクッと下がる。


これを言ってしまうと身も蓋もないシリーズ2: グロサリー店へのアクセス

2020年までは坂が多い地域に住んでいて、スーパーで食材を購入して自宅に持ち帰るためには必ず坂道を登らないといけなかった。これはかなりのハードルだった。首都圏で車は持っていないので徒歩がメイン、坂が多いこともあり自転車も持っていなかった。

いまは複数のグロサリー店へ徒歩5分以内にアクセスできる立地になったことで、食材を買いにいく行為に対する障壁がとても下がっている。隣のブロックのコンビニに行くレベルの感覚で、ただ税別100円のカットねぎだけを買うつもりで外出するのすら苦ではないレベルである。次に引っ越しするときも、スーパーなどが近い場所にしようと思う。


まとめ: 環境が揃ったら自宅ごはんが楽しくなった 

私はもともと、食事を準備するために時間をかけたくないと思っている。引っ越し前は、起きたらすき家に行って朝食メニューを頼むような生活をしていた。コロナウイルスが問題にならなかったら、こんなに普段から自宅でごはんを食べていなかったか、弁当などに依存していたと思う。1年前の食生活と比べて、1日あたりのコストはコンサバに見積もっても半額以下になっていて、冷蔵庫以外はすでに投資対効果は得られている。

使いやすいツールを揃えるということは、台所に対する苦手意識を和らげてくれて、場合によっては手間や苦痛を取り除いてくれるんだなあと改めて感じている。スノーボードでも下着やフリースなどをユニクロから山用に変更したときに、それまでの苦労から解放されてとても快適になった。自宅でごはんを食べるのも、同じようなものだなあと思う。

この一年間の食生活の変化は、自分の残りの人生の食習慣そのものを変えることになることを確信している。


2019年12月10日火曜日

ARM搭載FPGAボードでHDMI->VNCサーバーを動かした話

この記事はさくらインターネット Advent Calendar 2019 の 6日目です。

こんにちわ。さくらインターネット在籍の @hasegaw です。今年も Advent Calendar に参加……していたのですが体調不良により投稿が大幅に遅れました😫

今回は、2019年4月に開催されたAI・人工知能EXPO さくらインターネットブースで展示したデモンストレーションの構築時に使ったトリック(?)を紹介します。


弊社ブース@AI人工知能EXPO 2019


今回展示したデモ


デモ制作の背景

2019年は、さくらインターネットとしてもこれまでより大きなブースを作ることになり、立ち寄られた方に楽しんでもらえる「インタラクティブなデモ」をしよう、ということになりました。

以前の展示会でのデモは私が制作していたのですが、時間の都合もあり、今回のデモの実装は Pegara 社にお願いしました。


データセンター内で映像デモを構築

高火力コンピューティングのノードを展示会場で稼働させることにしたのですが、その場での推論結果を大型ディスプレイに表示するには、 Tesla V100 では役不足です(同モデルにはビデオ出力がない)。サーバー用の組み込みビデオプロセッサでは、ビデオの出力性能が貧弱で、今回のデモのようなインタラクティブな描画には向きません。このため、 Tesla の代わりに Quadro RTX 5000 を搭載し、同ボードから映像を出すことにしました。

実質的に「Quadro RTX 5000 を搭載したデュアルプロセッサのワークステーション」ですが、非常に大きなマシンなので、搬出・搬入も一苦労します。このため、最初から最後までデータセンター内でマシン(予備機を含めて2台)のセットアップを済ませておき、データセンターからビックサイトの展示会場まで直送することにしました。

ただ、会場でデモ中に映像が途切れるようなことがあってはテンションだだ下がりです。このため、データセンターに置いたまま、デモの動作が途切れないかを確認するための手段が必要でした。

通常のサーバーであれば、 BMC のリモートコンソール機能が有効ですが、後から Quadro RTX 5000 ビデオカードを増設した場合には、そのような便利機能は使えません。

IP-KVM 装置でも倉庫に転がっていればよかったのですが、そもそもホスティング事業が主なビジネスともいえる弊社の場合、KVM切り替え機すらほとんど見かけません。このため、 Quadro から出力された映像をリモートから確認するというイレギュラーな要件に適したオモチャを適当に見繕う必要がありました。


データセンター内のHDMI映像を観測するためにどうするか


いちばん最初に思いつくのは HDMI キャプチャデバイスなどをサーバラック内に仕込む方法です。ただ、この方法では別途 PC 等を用意する必要があり、面倒です。このため、今回は ARM 搭載 FPGA ボードを利用することにしました。

FPGA と言っても、今回利用した PYNQ-Z1 ボードでは、用意されているイメージを microSD カードに書きこむだけで、 HDMI ポートからの DVI-D 信号キャプチャーが可能です。

プログラマブルロジックに Xilinx の AXI Video DMA IP がインプリメントされているので、このレジスタを自分でARMコア側から叩いてやれば、DVI-D から1フレームを読み取るのは割と簡単です。

以前、実験的に「PYNQ-Z1にDVI-Dで入力された映像がが映るVNCサーバ」を試作していたため、それを使いました(使ってみたかったw)

DVI-D信号が映る謎なVNCサーバー

4-in-1 HDMI マルチビューアの利用

今回、会期中にマシン障害が発生した場合の対策として本番機と予備機の2台を準備しました。この2台のマシンの出力を同時にモニタリングするために複数映像を同時表示できるHDMIマルチビューアを利用しました。

この装置を介しておくとマシンの再起動中などにも常に 1080p60 の信号が出続ける特徴があり、長期間にわたるビデオキャプチャのトラブルを防ぐ上でも有効です。

今回使用した 4-in-1 マルチビューアはシリアルコンソール操作により表示内容の切り替えも可能ですので、両方の画面を出力したり、片方の画面をフルスクリーン表示したり、と遠隔操作することも可能です。


データセンターに設置

全体像
データセンターから送られてきたサーバーの映像
(Ubuntu 16.04と、BIOSのPOST画面が映っている)

これでリモートからVNC経由でデータセンター内の画面を表示できるようになりました。この仕組みは1ヶ月以上無事に動き続け、でデモの開発はほぼリモートで行われ、実際にマシンの前で作業を行ったのは搬出前の動作確認(1日)のみで済みました。


最適化の余地

コードを見られるとすぐわかるのですが、非常に雑な実装でフレームバッファのコピーを繰り返しています。

PYNQのbitstreamに含まれているビデオキャプチャはOpenCVで用いられる1pxあたり24bit BGR順フォーマットに合わせられており、libvncserverが求める1pxあたり32bit RGB順のピクセルフォーマットとは異なっています。このため、今回のコードではOpenCVをcvtColor関数を用いてソフトウェアでフォーマット変換していますが、ちゃんと性能を出したければ PL 側で libvncserver が要求するビデオフォーマットに変換した状態で DMA コントローラに食わることでゼロコピー化も可能でしょう。

以前から事情が変わっていなければOpenCVをNEON命令を利用するように再コンパイルするだけでも上記の色変換処理の速度はあがるのですが、PYNQ-Z1のメモリ帯域幅は細いのので PL からビデオのピクセルデータを受け取る時点で工夫するのが理想です。

また、フレームバッファのなかで変化した範囲を libvncserver に渡せれば画面の差分転送が可能になるので、そこまでやりきれば、一般的なデスクトップ画面などを転送する場合にパフォーマンスが高いものが作れるのではないかと思っています。

VNCは、変更があった領域のみを転送することが可能なプロトコルですので、各種パフォーマンスのチューニングをしていけば今後で活用余地が見いだせるのではないかと思っています。


別の実装方法

今回使用したVNCサーバーは、まだホントに画面が映るだけで差分転送をしていないので画面全体を毎回再転送するため非効率でした。正直なところ、性能だけを考えれば、入力フレームをMotion JPEG にエンコードしてストリーミングする実装を使ったほうが良かったと思います。

別のハードウェアを使う方法として Raspberry Pi シリーズは H.264 エンコーダを持っているので、映像のストリーム送信の用途には向いています。CSI-2 カメラインターフェイスにHDMI to CSI変換モジュールを取り付けるとHDMI映像をキャプチャできます。私がこの作業を行ったときはまだ OpenMomoなどが利用できる状況にはなかったのですが、今時だとH.264+WebRTCなどもアリですね。

 手元でも Raspberry Pi 4 + B101 ボードで色々試しています。

まとめ

映像デモマシンをデータセンター内に設置して開発するために、今回は手持ちの ARM+FPGA ボードでこしらえた「受信したDVI-D映像を表示できるVNCサーバー」を使ってみました。
HDMI映像をIP経由でストリーミングできる手段は増えてきていますが、こんな方法もあるということで参考になれば幸いです。


この記事はさくらインターネット Advent Calendar 2019 の 6日目でした。7日目の記事もお楽しみに。


過去に参加した Advent Calendar まとめ




2019年9月25日水曜日

iOSのAPNプロファイルをダウンロードして再インストールの時に備える

現在、メインの携帯電話キャリアとして IIJmio を使用していますが、地味に手間なのが APN の設定です。

APNプロファイルをダウンロードすればよいのですが、例えば海外出張から戻ってきて、現地の SIM カードから国内の SIM カードに戻すと、 APN プロファイルの設定やダウンロードが必要になります。ダウンロードするには LTE 通信ができるか、 WiFi アクセスポイントにたどり着かないといけません。すると、移動中にさくっと APN 設定を復元できなかったりします。

ここでは、 iOS 系のデバイス(iPhone や iPad)で、オフラインのまま APN プロファイルを再インストールできる方法を紹介します。インターネットに接続できない状態で APN プロファイルをインストールできるよう、内蔵フラッシュ領域にコピーを置いておき、必要時にはあらかじめダウンロード済みの APN プロファイルをロードします。

Safari で IIJmio APN プロファイルのダウンロードページを開きます。
https://www.iijmio.jp/hdd/devices/config.jsp


Cellular Payload 版の APN プロファイルの画像を長押しして、ポップアップを開き、リンク先のファイルをダウンロード を選択します。



Files アプリを起動し、ダウンロード済みファイルを確認すると iijmio-celluar ファイルが確認できます。



ただし、このダウンロード先フォルダは iCloud 上となっており、いざというときにアクセスできないかもしれません。

画面右上の Select をクリックし、プロファイル ファイルを選択状態にして、画面下部からフォルダアイコンをタップしてプロファイルの移動画面を出します。そしてローカルストレージにコピーしましょう(このiPhone内もしくはiPad内)。まだ大事なAPNプロファイルを保存するのに適したフォルダを持っていなければ、この機会に作るとよいでしょう。私は hasegaw/private のなかにとりあえず保存しておくことにしました。



Files から、今回ローカルストレージに保存した APN プロファイルをクリックすることによって、プロファイルをインストールできます。クリックしたプロファイルは IIJmio サイトからダウンロードした場合と同様に Settings からプロファイルのインストールを別途許可する必要があります。


また iCloud 上にこのようなファイルを集めておけば、まとめてプロファイルを復旧するときにまとめてインストールできて便利です。たとえば、オレオレ証明書の pfx ファイルなどを置いておくと便利ですよ。

ガガーン・・・!

2019年6月26日水曜日

iPhone XでGoogle Fiをアクティベートしてみた

アメリカ出張中にBestBuyでGoogle Fi SIMを普通に買うことができたので、買って契約してみました。
Google Fi は日本ではほとんど知られていないと思いますが、 Google が米国で提供する携帯電話サービスです。だいたいのサービスの特徴として
  • 20ドルで1電話回線(通話、Text、データ)を利用可能。10USD/1GB利用、ただし80USD/月で課金打ち止め
  • 15GBぐらいまでは使える
  • 世界170カ国ぐらいで、上記価格でLTEデータ通信が使えるので海外行きには便利
  • 日本に持ってきているとUSの番号にかかってきた電話がローミングで受けられる?
といった感じになっています。詳しくは https://fi.google.com を見てみてください。


今まではどうしていたか

これまでは個人的にアメリカと連絡をとったりするときのために SkypeIn 番号をとっていました。はじめての海外がユタだったことから愛着もあり 1-801-****-**** の番号を押さえていました。

また、 iPad Pro の Apple SIM で 150日間で10GB程度使える $10 のプランこれまで3-4回契約してきました。だいたいの場合はこれで困らないのですが、以下のパターンでちょっと手間だなーというのがありました。
  • カーナビゲーションに iPhone を使うときに毎回 iPad Pro 経由でテザリングを有効にしないといけないのが地味に面倒
  • Apple SIM から T-Mobile 契約をアクティベートできずにハマったことがある。LTEがある前提でいったら宿泊先の情報をUS到着後に確認せねばならず、LTEなしで別のホテルで泣きついてWiFiを借りるという苦労を去年テキサス州でしました。SIMアクティベートに苦労した詳細は IIJmio SIM カードが入った iPad Pro (2017) 10.5インチモデルで Apple SIM を使おうとして苦労した話 にまとめてあります。
  • 結局、毎回 iPhone X 用に SIM が欲しいという状態になり、そのたびに AT&T や Verizon に駆け込み

Google Fi  SIM を BestBuy で普通に発見

ちょっと目立たないところではありましたが、  Google Fi の SIM が BestBuy の携帯電話売り場に普通に売られて居ることに気づいて、とりあえず二枚買ってみました。一枚おおよそ10ドルしますが、10ドル分のデポジットがあるので実質タダになります(申し込みをした場合は無料で宅配で送ってもらえるものを店頭で値付けしているが、その分はデポジットになるという仕組みです)。もしかしたらSIMを使わずに放置したら有効期限切れになってしまうかもしれませんが、まあ男の子のおもちゃ的要素も強いので、そのときは、まあ、それでいいでしょう(その場でプリペイドカードを activate している感じなどはないので、たぶん大丈夫だとは思います)

なお BestBuy での店頭売りがはじまったのは 2019年3月頃からのようです。


アクティベートに必要なもの

翌日、早速契約してみることにします。事前に調べていたこともあり、だいたい必要なのはこんな感じだということがわかっていました。
  • SIM カードを手元に準備する必要がある
  • Google US のアカウントでないとサインアップできないらしい?
  • US 内の住所が必要
  • 課金用クレジットカードも US みたいな話をみかける
SIMカードは Google Fi の Web サイトから郵送を申し込むと1週間以上かかるそうでホテル宿泊者にはつらいですが、 BestBuy で小売りがはじまったことで一気にハードルが下がりました。

Google のアメリカのアカウントは作ればいいだけです。  Google Fi 申し込み時だけ在住国をアメリカに変更すればいいという話も見かけるのですが、何か面倒がおきて普段使いの Google アカウントに影響が出る場合を嫌って、今回は新しく Google US アカウントを独立したかたちで取り直しました。

US 内の住所は持っていませんが、「滞在先ホテルの住所を使う(嘘はついていない)」「勤務先会社のブランチオフィスの住所を使う」「知り合いの家の住所を借りる」「コワーキングオフィスの住所を借りる」といった手があるかと思います。残念ながらいまは雇用関係にある会社で直接米国内にブランチをもっていないので、関連会社の住所とか借りちゃおうかといろいろ悪巧みの考えたのですが、最終的にはホテル住所を入れ、アパート名として「The North Side Inn Guest」という要領で登録して、無事に開通までこぎ着けました。すべて正直で、嘘は一切ついていません。

最後の課金用クレジットカードでUS発行のものを用意する方法は思いつかなかったのですが、Webサイトで前例を調べていたら、US国内で買えるVISAなどのプリペイドカードに現金をチャージするという方法があるそうです。たとえば50ドルをスーパーマーケットなどで支払うとVISAのクレジットカードとしてプリペイド分だけ使えるカードを発行してもらえます。
この手を使おうかなと思ったのですが、カードに残高を追加する refill が日本国内からできないであろうことを考え、とりあえず自分が持っているカードでダメ元で試すことにします。


Google USアカウントを作成する

まずは US 内で Google アカウントを作成します。 Google アカウントの作成自体は特に普通のことですし細かくは書きません。


Google Fi に加入する

米国内のホテルの WiFi を使って https://fi.google.com/signup から申し込みを進めていきます。今回は端末を購入せずに Apple Store で購入済みの iPhone X と手元に準備した SIM カードを使用します。その条件で画面を遷移していくと 1回線20USD+データ10USD/1GB/mo.のプランが表示されます。

サービスアドレス(サービスを受けるメインの住所、おそらく緊急車両などを呼ぶ場合のベースエリアになる)の入力があったので、宿泊中のホテルの住所などをベースで入力します。(スタバWiFiなどで自宅住所のZIPコードをきかれたりしますが、とりあえずホテルのものを入れておくと通過できたりしますね)

課金先は、日本で発行された Delta American Express Gold を使っているので、こちらでの支払いという形にしたらあっさりと契約できました。


Google Fi アプリを入手する

Google Fi は日本でサービスされていないので、 Apple のアカウントが日本在住になっていると Google Fi アプリが iPhone X 上の App Store で見つけられません。このため、一時的に普段使いの Apple アカウントを US に変更することにしました。

Apple サイトにログインし個人情報を変更します。先と同じ要領でホテル住所でアカウントを作成しました。ここで請求先クレジットカードを登録するように求められるのですが、単に None (なし)のみを選択して先に進みます。ここでは、 Google が許してくれた日本のクレジットカードは通りませんでした。また、一度でもカード番号などを入れ始めてしまうと None を選択してもカード番号が不正といったエラーメッセージが出て咲きに進めなくなってしまいました。

Apple アカウントが US ベースになってから iPhone X の App Store が US の App Store ベースになると、 Google Fi アプリが検索で出てくるようになりますので、インストールします。

ここまでが終わったら、 Apple アカウントの設定をまた日本に戻しておきます。


Google Fi SIM をアカウントに追加する

続いて SIM を使えるようにしていきます。購入済みの SIM をスロットに差し込み、先ほど  iPhone X にダウンロードした Google Fi アプリで SIM をアクティベーションします。SIMパッケージに付属のワンタイムキー入力、またAPN設定などを済ませると、端末を再起動し次第サービスが利用できるようになりますという旨のメッセージが表示されます。


おつかれさまでした

上記で、割とあっけなく Google Fi の SIM を開通させることができました。


どう使うつもり?

海外出張に出たときに、米国のほか Google Fi のサービスエリアであれば、空港に降り立った瞬間から音声、LTEデータが使える回線を手元に持つことができるのは十分なメリットあると思っています。

現地のAT&Tマンスリープランと比べて同じぐらいかちょっと高いぐらいの利用料ですが、データ通信が少なければ割安になりそうですし、データ通信は基本的に iPad Pro で利用できるプランでテザリングすれば Google Fi での通信量を抑えられ、Fi に課金されないので、USの電話番号とLTEデータ通信が iPhone X から利用できるというメリットが発生します。

Google Fi のLTEデータが高いと思うのなら、SIMを入手するまでの予備回線として利用するのもありかもしれません(まあ、それならAT&TとかのSIMカードを事前購入してアクティベートだけしろよという話はありそうですが)。

また米国内で取得したSIMを日本にもってきても、サービス的にはユーザがSIMを持って海外旅行した状態になります。米国電話番号に対する音声通話もローミングされる認識ですし、ある意味 SkypeIn みたいなものを SIM として持った状態になります。しかも多分 Text はできる。

また、日本で利用する場合、日本のMVNOと比べれば割高ではありますが、最大月80ドルで15GB以上通信できる非常用SIMとしても利用できます。

月20ドルを1年間寝かせても年間240ドルですし、激安とは思わないものの、SkypeIn番号を取得するのだけに月13ドルかかっているぐらいなら Google Fi を契約し続けても正直月7ドルぐらいしかランニングコストは変わりません。このため、 Google Fi はアクティブな状態で Skype In は解約することにしました。


eSIM じゃダメなの?

私が持っている iPhone X が eSIM 対応だったら eSIM で考えたかもしれません。ただ普通の SIM として持っていると、帰国後に自宅で余っているLTE端末などにさして電話を受けるといったことも可能なので、物理 SIM がいいかなーという思いはあります。


おわりに

正直身構えた割にあっけなく開通した Google Fi ですが、しばらく使って(?)みようと思います。飽きたりコスパ悪いなと思ったら解約するかもしれませんが。

2018年12月4日火曜日

AMD GPUによるディープラーニング環境の構築

こんにちわ。さくらインターネット 高火力コンピューティングの雑用担当 @hasegaw です。このエントリはさくらインターネット Advent Calendar 2018 4日目のエントリです。なお、前日のエントリは UIT#5 で登壇してきました + 資料への補足 でした。


新しい Radeon GPU が登場

1ヶ月ほど前になりますが、2018年11月6日に、AMDが新しいGPU 「Radeon Instict MI60」を発表しました。4096のストリームプロセッサー、1TB/sの高帯域幅な32GB HBM2メモリを搭載し、PCIe 4.0 16レーンに対応したGPUです。また、ストリームプロセッサーが 3840 に変更された Radeon Instict MI50 というモデルを紹介されています。

AMDが7nm提供開始、Vega「Radeon Instinct MI60」と最大64コアのRomeこと新「EPYC」を発表
http://ascii.jp/elem/000/001/768/1768981/


ディープラーニングと Radeon GPU

Radeon GPUといえば、2018年はマイニングで話題になったりもしましたが、OpenCLによる計算用途にも利用できます。また、最近では ROCm と呼ばれるソフトウェア群によってディープラーニング目的でも使えるようになりました。

本当に動くの?

Radeon でディープラーニングってきちんと動くの?ちょっと試してみないと判らないな……と思われたりするでしょうか?

私は、高火力コンピューティングの仕事をしつつ、サイドプロジェクトで GPU を使ったりもするので、そのときはデータセンターをおいたマシンを使ったりもするのですが、かといって高価な Tesla を常に浪費するのも心が痛むので、最近は 10分の1のコストで済む Radeon で事足りる作業なら Radeon GPU を使ってみています。にわか機械学習マンとしては、現状 Radeon GPU で困ったことはありません。

最近は TensorFlow もアップストリームに追従するかたちで ROCm 対応版が作られており、動かしてみても、だいたいの場合は問題なく動くようです。また、 Radeon Instict シリーズに一気にいかなくとも、秋葉原で手に入る Radeon シリーズでとりあえずの味見をすることも可能です。

「本当に自分が持っているワークロードが動くの?」と気になる方は、 Pegara 社の GPU EATER をお試しになられてはいかがでしょうか。

GPU EATER
https://www.gpueater.com/

なんと1時間あたり1ドル未満で、RadeonシリーズのGPUサーバーを試せます。また、ログインは事前に用意したSSH公開鍵に対応する秘密鍵でSSHするだけ。利用開始も簡単で、最初から ROCm フレームワークや TensorFlow サンプルなども入っています。

root@C-2b457c0e-0884-4f80-94fc-4bbeec7ecb4c-685:~/deep_learning_yolo_v3# python3 yolo.py  image.jpg
Using TensorFlow backend.
2018-10-10 04:56:03.761749: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1519] Found device 0 with properties:
name: Device 687f
AMDGPU ISA: gfx900
memoryClockRate (GHz) 1.622
pciBusID 0000:03:00.0
Total memory: 7.98GiB
Free memory: 7.73GiB
2018-10-10 04:56:03.761786: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1630] Adding visible gpu devices: 0
2018-10-10 04:56:03.761820: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1039] Device interconnect StreamExecutor with strength 1 edge matrix:
2018-10-10 04:56:03.761829: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1045]      0
2018-10-10 04:56:03.761848: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1058] 0:   N
2018-10-10 04:56:03.761907: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1178] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 7524 MB memory) -> physical GPU (device: 0, name: Device 687f, pci bus id: 0000:03:00.0)
model_data/yolo.h5 model, anchors, and classes loaded.
(416, 416, 3)
Found 5 boxes for img
person 0.94 (143, 281) (216, 495)
person 0.97 (112, 17) (207, 331)
person 0.99 (239, 297) (317, 514)
person 0.99 (253, 98) (319, 364)
person 1.00 (38, 165) (102, 436)
20.274007220985368
Output => image.jpg.out.jpg


ROCm 環境のインストールって難しくないの? → 思ったより簡単でした

手元に実際の Radeon GPU を用意し、環境を構築するにはどれぐらいの苦労があるでしょうか?実際  Ubuntu 16.04 ベースで試してみたときは、思ったほど難しくはありませんでした。 https://github.com/hasegaw/rocm-tensorflow-ansible/ に、私が環境作成に使用している Ansible role から抜粋したものをおいておきますので、必要に応じて加工して利用してください。何をしているかというと

ROCM 環境の構築)

  • カーネルの更新
  • apt に ROCm レポジトリを追加
  • ROCm 関連パッケージをインストール。カーネルモジュールは DKMS で設定されます
  • /etc/profile.d/ に設定ファイルを展開
  • 必要に応じてユーザ(既存/今後の作成時のデフォルト)のグループ設定を変更
TensorFlow のインストール)
  • virtualenv をインストール
  • virtualenv 上に tensorflow-rocm をインストール
といった感じです。 ROCm は repo.radeon.com からのパッケージを拾えば動きますし、 TensorFlow も AMD 社がポートしたバージョンを PyPI に適宜パブリッシュしてくれているので、 pip install するだけの時代が来ているのです。


利用感はどう?

どちらかといえば、パフォーマンスの面よりも、秋葉原などの店頭でカジュアルに手に入る Radeon Vega 64 は 8GB メモリモデルぐらいしか市場で見かけておらず、 Radeon Vega Frontier Edition (12GB) がほぼ市場から消えている状況で利用できるメモリ量が少ない点が、がつがつワークロードを回そうと思うと、ちょっと気になるかもしれません。

ワークロードによるので一概に言えないのですが、私が試した範囲では Radeon Vega 64 で NVIDIA TITAN X の8割から同等程度のパフォーマンスが得られていました。 GDDR5 搭載の NVIDIA GPU が HBM 搭載の Radeon Vega 64 に対して優位なのは NVIDIA すごいなーと思いますし、 Radeon 上でのチューニングはこれからなのかな、という感じがします。

現状の tensorflow-rocm は、CUDAバージョンのカーネルをコンバートして使っているようなので、このあたりの最適化が進めばさらに性能が伸びる余地もありそうです。例えば  GitHub 上のアクティビティを眺めていると、和算+活性の "Fusion" カーネルの実装なども最近行われていました。どんどんアップデートされているので、今後が楽しみです。


まとめ

AMD Radeon シリーズでのディープラーニングもそろそろ実用段階に入ってきたのではないか、という感じがしています。

ただ、ディープラーニング用途で Radeon 系 GPU をすでに持っている方はほとんどいないでしょう。そんな時でも、ご紹介したとおり、 Pegara 社が非常にお安い価格で Radeon GPU を利用できる GPU EATER を提供されていますので、興味が湧いたら、こちらのサービスを試してみてはいかがでしょうか。