端の知識の備忘録

技術メモになりきれない、なにものか達の供養先

FF11のマップ移動が難しすぎるのでグラフ構造を使って解決してみる【NetworkX】

概要

FF11のマップ、多すぎて覚えられない!

移動手段も経験も豊富なベテラン冒険者の方々にはきっとなんの障害にもならないのであろうが、初心者には

白魔道士の限界突破のために『偉大な白魔道士の証』を取りに行きたいけど、テリガン岬?ソ・ジヤ?ってどこだよ!」

とか

「闇の王を倒しにズヴァール城?たしかザルカバード?ってことは更に隣は……どこだっけ?」

みたいな感じで本筋ではない、その場所への行き方という壁がそびえ立っている。

ウィキもFF11 DBも非常に内容が充実しておりこの上ない情報源ではあるのだが、流石にピンポイントにウィンダスからボスディン氷河に行きたい!みたいな疑問には答えてくれない。

結局地図を辿っていくしかないのだが、土地勘のない場所はデータベースのマップを追うのも難しい。

どうにかならないものかと思っていたところ、丁度仕事で化合物のグラフ構造表現の話をしていたのを思い出した。

マップって正にノードとエッジで表せそうだよね!という考えから、PythonのNetworkxというパッケージを使ってFF11のマップ移動をグラフ構造の最短経路問題として解いてみるというお話です。

似たようなことやっている人はもういそうだけど、勉強がてらということで。

結論

  • ちゃんとFF11のマップはグラフ構造で表現できる
    • とりあえずどのマップを辿れば目的地に行き着くかは探索できるようになった
    • 本当は移動距離の情報をエッジに埋め込めればよいのだが、うまいデータの形が思いつかず断念

f:id:hashicco:20210323213729p:plain

グラフにしてもさっぱりわけがわからない。が、nx.shortest_path(graph, source='ジュノ', target='ズヴァール城')で探索すれば、

['ジュノ', 'バタリア丘陵', 'ボスディン氷河', 'ザルカバード', 'ズヴァール城']

とかnx.shortest_path(graph, source='ジュノ', target='テリガン岬')とやれば

['ジュノ', 'バタリア丘陵', 'ジャグナー森林', 'ラテーヌ高原', 'バルクルム砂丘', 'グスタフの洞門', 'テリガン岬']

みたいな結果が得られるものができた。素晴らしい!

  • データの入力がきつすぎた。ひたすらFF11DBの地図を見ながら繋がっているマップを入力し、計2時間かかった。マップ多すぎ!

    • 入力データをYamlファイルで記述したのは我ながらいい考えであったと思うが、手入力はきつい
    • Pythonコード20行に対してマップ定義のyamlファイルが1262行という有様である。ほんとはある程度座標も実際のマップに即して書きたいが、流石に面倒すぎる。
  • このデータ使ってElastic BeanstalkでWebアプリとか作ったらいい自由研究になりそう。……だけど今更利用者がいない気がする。

コード

GitHub - bobfromjapan/FF11_route_finder

Githubにも置いておいたので、なんかミスがあったらPR投げてください。

こんな感じのYamlファイルとしてそれぞれのエリアから行き先を記載していき、これをパースしてあるエリア→目的地というノード-エッジ-ノードをひたすら作って行く感じ。

あと、飛空艇や船のノードの重みを増やしておくことで、グラフで表示するとき重要都市を真ん中あたりに持ってこようというちょっとした工夫もしている。

areas:
  - name: サンドリア
    survival_guide: True
    home_point: True
    distination:
      - name: 東ロンフォール
        weight: 1
        transportation: walk
      - name: 西ロンフォール
        weight: 1
        transportation: walk
      - name: ドラギーユ城
        weight: 1
        transportation: walk
      - name: ジュノ
        weight: 100
        transportation: airship
  - name: バストゥーク
    survival_guide: True
    home_point: True
    distination:
      - name: ツェールン鉱山
        weight: 1
        transportation: walk
      - name: 北グスタベルグ
        weight: 1
        transportation: walk
      - name: 大工房
        weight: 1
        transportation: walk
      - name: ジュノ
        weight: 100
        transportation: airship
  - name: ウィンダス
    survival_guide: True
    home_point: True
    distination:
      - name: 東サルタバルタ
        weight: 1
        transportation: walk
      - name: 西サルタバルタ
        weight: 1
        transportation: walk
      - name: 天の塔
        weight: 1
        transportation: walk
      - name: ジュノ
        weight: 100
        transportation: airship

Pythonコードは適当だけどこんな感じ。

工夫としては日本語で書いたyamlを読むためにcodecsを使ってファイルオープンしたこと、パースしたyamlを上手いことfor文で回してエッジを追加したことでしょうか。

import networkx as nx
import codecs
import matplotlib.pyplot as plt
import yaml

walk_only = True

graph = nx.DiGraph()

with codecs.open("areas.yaml", "r", 'utf-8') as yml:
    net = yaml.load(yml, Loader=yaml.SafeLoader)

for i in net['areas']:
    for j in i['distination']:
        if walk_only:
            if j['transportation']=="walk":
                graph.add_edges_from([(i['name'], j['name'], {"transportation" : j['transportation'], "weight":j['weight']})])
        else:
            graph.add_edges_from([(i['name'], j['name'], {"transportation" : j['transportation'], "weight":j['weight']})])


# pos = nx.spring_layout(graph, k=1.2)
# nx.draw_networkx_nodes(graph, pos, alpha=0.6, node_size=500)
# nx.draw_networkx_labels(graph, pos, font_size=4, font_family="MS Gothic")
# nx.draw_networkx_edges(graph, pos, alpha=0.4)
# plt.show()

print(nx.shortest_path(graph, source='ウィンダス', target='ムバルポロス新市街'))

一番下のSourceとTargetを書き換えれば、任意のルートの探索ができる。

また、walk_onlyをFalseにすれば、汽船や飛空艇を使ったルートも探索できるはず。

例えばwalk_only=Trueで source='ウィンダス', target='ムバルポロス新市街' なら

['ウィンダス', '東サルタバルタ', 'タロンギ大峡谷', 'メリファト山地', 'ソロムグ原野', 'ジュノ', 'バタリア丘陵', 'ジャグナー森林', 'ラテーヌ高原', 'バルクルム砂丘', 'コンシュタット高地', '北グスタベルグ', 'ムバルポロス旧市街', '2716号採石場', 'ムバルポロス新市街']

てな感じ。ちなみにムバルポロスとか行ったことないのでこの道が正しいのかわからない笑

また、walk_only=Falseにすればウィンダス→ジュノ間とジュノ→グスタベルグを飛空艇でショートカットしてくれるので、

['ウィンダス', 'ジュノ', 'バストゥーク', '北グスタベルグ', 'ムバルポロス旧市街', '2716号採石場', 'ムバルポロス新市街']

となるよう。まあなんとなくあってそうな感じですね!めでたしめでたし。

Ryzen5 5600XとRX6900XTでFF14 4K 最高品質の(ほぼ)60FPS張り付きプレイが実現できる

概要

こないだRTX 3080とRyzen5 5600XでFF14 4K 最高品質の60FPS張り付きプレイが実現できるという記事を書いた。

hashicco.hatenablog.com

RTX 3080からRX6900XTに買い替えてからすでに2ヶ月もたったようなので、使用感を記す。

最近の週末は割とずっとFF14をやっており、このRX 6900XTとRyzen5 5600XというAMD製最新CPUとGPUの組み合わせでどれだけ快適にゲームができるかを、FPSの計測で確かめたというお話。

結論

  • RX 6900XTとRyzen5 5600Xの組み合わせによって、4K 最高品質でもほぼずっと60FPS張り付きが実現可能!個人的には満足な性能。

    • 3080よりもFPS出ない……。まあNvidia寄りのゲームだししゃーないか
    • でも5600Xも6900XTも発熱が少ないのが素晴らしい!どんなに上がっても60度以内で収まる今回のTSMC7nm AMDは良い。
  • しかしなによりも割と頻繁に「DirectXで致命的なエラーが発生しました」というエラーが出て落ちるのがつらみ……。フォーラムでも報告されているように、Radeon特有の問題のようである。

    • 仕方無しに4K最高品質から4Kデスクトップ高品質に落としてみたらなんとなく安定しているような気がする。最高品質で入る処理の一部で起きやすい問題なのかもしれない。

forum.square-enix.com

測定環境

  • CPU: Ryzen5 5600X
  • GPU: Biostar Reference RX 6900XT
  • MB: MSI B550 MPG Gaming Plus
  • SSD: HP EX950 500GB
  • Driver: 20.12.2
  • monitor: Acer ET322QK(Adaptive Sync有効)

使用ソフトウェア: Fraps

fraps.com

これでプレイ中ずっとFPSを記録してみました。

結果

プレイ中ほぼ常時60FPSに張り付いていました。戦闘中でも街中でも

ただ、若干RTX3080よりもFPSは低めで、50-60FPSを行き来している感じ。

今後FF14を4Kで快適にプレイしたい人は(エラーさえ出なければ)RX6900XTも十分通用するが、正直RTX3080をおすすめします。

不定期FF11日記① 新米冒険者、2回洋上で死す

概要

私は小2のときからFFをやってきた生粋のFFプレイヤー。ナンバリングはもちろん、割とほとんどの外伝シリーズもプレイ済みである。

そんな私でも唯一やったことの無いタイトル、それがFF11であった。

中高生のときはお金がなくて月々金を払ってゲームするというのはできなかったし、大学生になってからはFF14始めてしまったので流石に2つも同時にMMOをすすめる余裕はなかった。

隙あらばFF11をやってやろうと思っていたのだが、FF14の情報発表会で次の大型パッチが今年9月からという案内があった。

丁度ボズヤも青魔も終わり凪に入ったところだし、やるなら今しかない!ということでFF11の無料体験を先日から始めたのであった。

ヴァナ・ディールに降り立ち15時間、FF11の洗礼を浴び続ける

登録の仕方やスクエニアカウントとの結びつけかたが分からなかったり、いざ初めて見ると解像度が荒すぎて4KにするもHUD小さすぎて見えなくなったり、箱コンさしても動かなかったりと、始めるまでも様々困難があった。

そしていざ始めてみたもののしばらくはマップの見方がわからずどこ行っていいんだがわからなかったり、ウィンダスの街が広すぎて迷子になったり、Seleleさんのミッション終わったあとどこからメインミッション進めればいいのか分からなかったり……。

最近ユーザーフレンドリーなぬるいゲームをやりすぎて緩んでいた私は、本格MMOの洗礼を浴び続けるのであった。いや、でも始めたばかりでミッション見ても

・ヴァナ・ディールの星唄

冒険者は知る、己の運命を……。

ヴァナ・ディールの運命を……。

しか書いてないんだからね!マジでちゃんと住人の話を聞いていかないと、次何していいのか分からなさすぎる。

FF14のメテオマーク追っていくだけでメインが進むのは今思えば凄い親切だったんだなあ。

とはいえ何も指針無しでこれを進めていくのはしんどい。ということでググってみると素晴らしい記事が!

note.com

丁度ウィンダススタートで序盤の流れを説明してくれている!これ幸いとこの記事をなぞりながらエミネンス・レコードを開放し、フェイスを開放し、どうやらこうやらウィンダスミッションを進めていくことができたのであった。

順調と思われた旅の矢先……

FF11始めたけどほぼ歩いてしかいない……。戦闘ほぼフェイス任せで戦ってる実感ない……。でも冒険してる感楽しい!位な感じでいつの間にかプレイ時間が15時間を突破。

次のミッションはウィンダス2-3「三大強国」。どうやら、船に乗って他の国に行くらしい。14で言うところの3国回るミッションみたいなものだろうか?

ウィンダスより東サルタバルタを駆け抜け、タロンギ大峡谷を超え、ブブリム半島へ。敵は同レベル帯なんでそんなに苦戦せずマウア入りまでは行けました。そう、マウラ入りまでは……。

マウラは予想外に人の多い街だった。人の密度が高いからだろうか、ウィンダスよりもずっと賑わっているように感じる。流れてくるログを見れば、補助魔法を掛け合う人や、謎の本を開き続ける人。

意気揚々と船着き場に向かう。ヴァナ・ディール時間で1時間でセルビナ行きの船が来るとのこと。おー船に乗るにもリアルに時間がかかるのかーと感心しながら、受付に話しかけて乗船!

……まさか移動手段たる船の上が死地となろうとは、ヌルゲーに慣れきった新米冒険者は予想だにしていなかった。

洋上の死闘!群がるとてもつよい骸骨たち!

セルビナまでは約10分で着くらしい。おー船に乗ってからもリアルに時間がかかるのかーと感心しながら(2回目)暇つぶしに船内を散策するLv25の白魔道士

客室には何もなし。甲板に上がってみると魚類のモンスターがいた。調べてみると「同じくらいの強さ」とのこと。暇なのでこいつを倒してレベリングしておこうと、フェイスでいつものクピピ・ヴァレンラール・テンゼンという心強い仲間たちを召喚。

サクサクと魚を2-3匹狩ったところだっただろうか、リポップしてきたモンスターの様子がおかしい。時間が夜になったからなのか、甲板はいつの間にか魚ではなく骸骨に支配されていたのであった。

強さを調べてみると「とても強そうだ」。うーん流石に手を出すのはやめた方が……?と思いつつも到着まであと8分以上残っているのでこの時間を無駄にしたくない。

ということで、少し離れたところからケアルで釣って1体ずつ倒してみることにした。船長室横に陣取りケアルをスケルトンへ詠唱。戦闘開始!

流石にとても強いだけあって一撃が痛い。さっさとヴァレンラールに釣ってもらって、クピピに回復してもらいつつ、テンゼンが削る。私は軽く棍で殴りながら応援していただけだが、順調に半分くらいまでスケルトンの体力は減っていった。

しかし、このまま押しきれるかと思った矢先事件が起こる。スケルトンが範囲攻撃を連打してきたのである。それだけなら別に問題ない。私も仮にも白魔道士なので、クピピの3分の1くらいのHPSで回復ができるのである。体力も半分以下になってしまったので、いそいそと覚えたてのケアルⅡを詠唱し始めるが……、何故か詠唱が妨害される

タゲ取ってないはずなのになんで?と思って焦っていると、何故か甲板真ん中くらいにいたはずの2匹目のスケルトンが船長室横まで来て私を殴りかかってきているではないか! なんで!?と再度思ったところ、見る見る間に減るHP。クピピさんがケアルⅢを詠唱してくれているが、一瞬赤くなったHP。するとなんともう1体遠ーくの方からスケルトンが来ているではないか!

もう勝てない!と思い急いで船長室に駆け込んでみるも船長はこちらに目を配ることすらなく気にせず舵を握り続けるし、スケルトンの魔法は扉を貫通して私に襲いかかる。

そして、そのままハゲタトゥーヒュームの白魔道士は、3体のとても強い骸骨に蹂躙されるのであった

……あとから知ったのだが、骸骨たちは生命感知なんだそう。HPの減り具合に応じて感知範囲が広がるらしい。このように生命感知骸骨に嬲り殺されることはよくあるらしく、その恐ろしさを身を持って体験したのであった。

リベンジ!再びの定期船

更に、ここで私はミスをしていた。新しい街についたというのにマウラでホームポイントに触れていなかったのである。

絶望……。ウィンダスより東サルタバルタを駆け抜け、タロンギ大峡谷を超え、ブブリム半島へと、さっき書いたのと全く同じ文章が使い回せます。

また片道30分の道程を駆け抜ける羽目になった後、再びマウラに入り今度はすかさずホームポイントに触れる。そして迷うことなく船着き場へ向かい2度目のセルビナ行きの定期船を待つ冒険者

少し待って再度の乗船。今度は骸骨には手を出さん!と心に決め、またレベル上げのために甲板へ躍り出る。えいやとプギルに殴りかかる白魔道士!……しかしまたも悲劇が。なんとフェイスを召喚し忘れていたのである!

そして、装備を更新していなかったせいなのか……。普通に同レベル帯のプギルにタイマンで殴り負けたのであった。

……タイトル通り2回洋上で死んだことにより3国に行く前に心が折れかけたものの、今度はマウラのホームポイントへテレポができる!ということで、迷うことなく500ギルを支払う。そして今、この日記を3度目のセルビナ行きの航路で大人しく客室に籠もりながら書き始めるのであった。

今回の反省

  • 生命感知には気をつけろ

  • 戦う前にフェイスは絶対出すべし

ちなみにこのフェイス出し忘れミスは何回もやることになるのだがそれはまた別のお話。

今更のFF11はこういった若干の理不尽さといい意味での面倒くささを思う存分味わわせてくれる。昔ながらの骨太RPGをやっている感じで大変懐かし楽しい。完全ソロでやってるのでMMO感は全然ないのだが、せめてメインシナリオクリアするくらいまではやろうかなと思います!

FF14用にフットスイッチOlympus RS31Hを米尼で買ってみた

概要

以前Razer Naga Proを買ったときにも書いたが、私は12ボタンマウスとフットスイッチがないとサスタシャクリアすら怪しい光の戦士である。

今まではルートアールの3ボタンフットスイッチを2年ほど愛用していたのだが、だんだんガタが来ており、最近では押したはずなのに反応しないこともしばしば。まあ物としては問題なかったし、たった3500円位で買ったやつがこれだけ持てばなんの不満もない。

Amazon.co.jp: ルートアール USB3連フットペダルスイッチ マウス操作対応 RI-FP3BK: パソコン・周辺機器

とはいえ最近は零式行ったりしているので、フットスイッチが不発して攻撃しようとしてベネフィク撃ってしまったり、ディビネ使おうとしてアスヘリ撃ったりしてしまうと困る。ということで、フットスイッチを買い換えることにした。

国内で買えるフットスイッチといえば、今まで使ってたルートアールのやつが安くて有名だが、ワンランク上のやつとしては文字起こし用のOlympusのRS27Hとか、Kinesisのフットスイッチ辺りだろう。どちらも多分FF14で使っている人がいるはず。

Amazon | OLYMPUS フットスイッチ RS27H | オリンパス | ボイスレコーダー用マイク

Amazon | Kinesis Savant Elite2 プログラム可能なトリプルフットペダル(FP30A) | Kinesis | マウス 通販

特に不満はないもののルートアールの同じものをもう一度買うのは芸がないし、Kinesisのやつは無駄に高い感じがしたので元々はRS27Hを買うつもりでいたのだが、なぜかECサイトで売り切れの嵐。そういえばオリンパスはかつて主力だったカメラ事業を切り離してイメージングソリューションに注力、とか最近聞いたのでもしかしたらフットスイッチも生産終了してしまったのだろうか……。困る。

仕方ないので色々探していたところ、まだ米アマゾンでは在庫があるっぽかった。しかも日本ではあまりお目にかかれないRS27Hの4ボタン版のRS31Hも売ってる。ボタンが多いに越したことはないし、終売?前にせっかくなのでRS31Hを買ってみたという話。

Amazon.com: Olympus RS31H Foot Switch for Professional Dictation Systems and USB PC Connection: Computers & Accessories

まとめ

  • RS31Hは普通にFF14で使える。

    • 左からCtrl, Alt, Shiftを割り当て。こうするとフットスイッチ押さずにマウスサイドボタンでホットバーの1段目、左押しながらマウスサイドボタンで2段目、、、てな感じで使える。詳しくは過去記事参照

    • 4ボタン目にはT(ターゲットがターゲットしている対象にターゲットを変更……。ニホンゴムズカシイネ)を割り当て。これですぐMTにターゲットできる。

  • ルートアールのやつよりキーアサイン変更ソフトも使いやすいし、押し心地もよい。小さくてコンパクトだしボタンも多い。1万出す価値は十分にある。継続して日本でも売っておいてほしい。

    • ちなみにFF14じゃ使わなさそうだが最大6つキー同時押しまで1ボタンに割り当てられるようなので、何か面白い使い方がありそう。
  • 米尼から買うと送料込み日本円で9911円。一番遅い発送を選択したが、予定の2週間より早く6日ほどで届いた。

  • 何よりフットスイッチと12ボタンマウスは最高の組み合わせである。ぜひ色んなヒカセンに一度は試してもらいたい。

    • 自分みたいな下手くそでもこれ使えばそこそこ戦えるので、やはりハードウェアにお金かけるのは上達への近道!ハードウェアチートとは言わないで!

特になんの困難もなく買えるので、FF14でフットスイッチ探している人は是非RS31Hも検討してみると良いと思います!

外観

海の向こうから外箱なしテープ封印もなし、伝票直張りで届いた。co.jpのクソデカダンボールも困りものだが、流石に本場のアマゾンは豪快すぎる気も。

発送はECMSなる国際便がやってくれたっぽい。

f:id:hashicco:20210208222817j:plain

中身は本体とDin to USBの専用ケーブル。本体のみのHなし型番の商品もあるようだが、PCに接続して使うならばこの専用ケーブルが必須。KP-13という型番のようだが、これ単体では入手性が悪いのでFF14用ならおとなしくRS27H, RS28H, RS31Hのどれかを買うべし。

f:id:hashicco:20210208222753j:plain

RS31Hの裏にはロックスイッチがある。これで真ん中のスイッチを無効化することができるらしい。

f:id:hashicco:20210208222827j:plain

最後に今まで使っていたルートアールの3ボタンフットスイッチと比較。圧倒的にコンパクトで作りもしっかりしている印象。

f:id:hashicco:20210208222805j:plain

設定

まずは設定ソフトウェアをダウンロード。

www.olympus-europa.com

f:id:hashicco:20210208224431j:plain

こんな感じで日本語にしっかり対応。最大1スイッチに6キーまで同時割当できるっぽい。何に使うのだろうか……

f:id:hashicco:20210208224427j:plain

私はまとめにも書いたとおり、Ctrl, Alt, ShiftとTキーを割り当て。長押しするボタンはLongを選択する必要があるので注意。

4ボタンならではだがWASDを割り当てれば足だけで移動できたりもしそう。まあそんなにメリットはなさそうだがゲームによっては楽しいかもね。

f:id:hashicco:20210208224424j:plain

ホットバーはこんな感じ。

f:id:hashicco:20210208225138j:plain

キーバインド設定をこんな感じでホットバー2, 3, 4を装飾キー+マウスサイドボタンと設定。

また、もう一つおすすめの設定としてはAltを使う場合、デフォルトで敵ターゲット送りに設定されているTabと同時押しされるとウィンドウ切り替えが発生してしまい鬱陶しいので、ターゲット送りのアサインを適当なキーに変えると良い。

私は絶対他と競合しなさそうなNumlock + -Numlock + +に設定して、マウスホイールのチルトにアサインしています。

f:id:hashicco:20210208225134j:plain

これで個人的には超快適にFF14操作ができます!通常のマウス・キーボードでGCD腐らせちゃうヒカセンたちはぜひ一度お試しあれ!まあ私はこんだけハードウェア揃えても腐らせちゃうけどね!

RX6900XT買えたのでRTX3080と比較!

税込み14万くらいで中古のRX6900XTを買ってしまった。

やはり今までR9290 -> R9390X -> RX590X -> RX Vega56と90番台やハイエンドRadeonを自作はじめたときから使ってきた身として、今回のフラッグシップであるRX6900XTは超魅力的に見えてしまった。まあこれらは全部2万前後で買えたからコスパRadeonであったが今回は14万……。ぶっちゃけ高すぎる。

とはいえまともなワッパでnvidiaと勝負できるグラボというとほんとに久々ですし、ちょうどSAMが使える5600X使ってるのでそれも使ってみたかった。……いくら理由をあげようともただの衝動買いです。

更にRTX3080の売価が上がっており、なんだか買ったときとおんなじ値段で売れそうだったので買い替えてみたというお話。

やっと買えたRTX 3080 ~msi Ventus 3X 10G OC を試す~ - 端の知識の備忘録

まとめ

  • 若干だが3080よりも確かに性能は高い。しかも低消費電力。さすがTSMC 7nmである。

  • ちゃんとFF14は4K最高品質でほぼ60FPSで動く。でもリムサは55FPSくらいしか出なくてつらめ。

  • リファレンスファンの冷却はとても優秀。ベンチ中でも75度未満で回転数1500rpmにすら行くこともなし。

  • SAMは気休め程度に効果がある気がする。設定は簡単なのでRyzenユーザーはとりあえず入れておけばいいと思う。

  • とにかく新品で買えないのが難点。こんな高いものを中古で買うのは怖すぎる。

まさかRadeonがハイエンドクラスで戦える性能を持ち、なおかつワッパがいいという時代が来るとは思わなんだ。

いつもどおりドライバが徐々に成熟していくならば、いつかは疑いなくRTX3080よりも良い選択肢となるのかもしれない。

……が、今は残念ながら4万近い差額を埋めるほどの理由はないというのが正直な感想。でも+2万だったら迷わずRX6900XT!って感じ。12万くらいが適正価格だと思う。

まあどちらも品薄も品薄なので、入手性がまともにならない限りはコスパ議論は難しいように思う。

よりにもよってまたも自作趣味にとっては迷惑でしかないマイニングブームがやってきているようですしねー。

まあ私はRTX3080売り払ってRX6900XTに乗り換えようと思います!買っちゃったので!

RTX3080 と RX6900XTの比較

  • RTX 3080 Pros

    • DLSS, CUDAが使える
    • RT性能が高い
    • 6900XTより4万円近く安い(定価で買えれば)
    • Nvidiaに最適化したゲームも多い
  • RX6900XT Pros

    • メモリが6GBも多い
    • 若干だが性能が良い
    • USB-C端子がついてる
    • ワッパがいい

こう見ると……今の所特段の理由がなければRTX3080一択ですかね……。もしくはRX6800XTならいい勝負できるかな。

あとは10GB以上メモリを使うゲームが増えればRadeonの時代が来るかもですね。

開梱!

今回買ったのはBiostarのリファレンス仕様のもの。VA69T6AEP2という型番のやつ。

あまり高級感のない箱。シールが雑に上張りされてるの14万もするフラッグシップとしてどうなんでしょうね……?

f:id:hashicco:20210120222239j:plain

1370gのVentusのほうが長くて分厚くてデカイですが、重さはなんとRX6900XTのほうが1530gと重いらしい。先述の通り冷却性能は素晴らしいので、きっと良いヒートシンクを使っているものと信じたい。14万もしたし!

f:id:hashicco:20210120223845j:plainf:id:hashicco:20210120223855j:plainf:id:hashicco:20210120223909j:plainf:id:hashicco:20210120223923j:plain

ベンチ条件

  • OS: Windows10 Home
  • CPU: Ryzen5 5600X
  • MB: msi mpg B550 gaming plus
  • RAM: 3200MHz 16GBx2
  • システムディスク: HP EX950 NVMe 500GB

SAMは有効化して測定。BIOSRe-size BARAbove 4G memory/Crypto Currency miningを設定すれば有効になるらしい。参考URL

いつもどおり下の3つを測定しました。

ベンチマーク

  • GPU-Zのスクショ

f:id:hashicco:20210120222628g:plain

- RTX3080 RX6900XT
Firestrike Ultra 10331 13634
Timespy 14331 15249
FF14 14249 14619

まあ全体的にRX6900XTのほうが性能良いっぽい。

特にFirestrikeは凄まじいスコア。かつてDX12だと強いRadeonというイメージだったのですが、今回はDX11のテストのほうが差がついているのが興味深い。

有料版買ってないのでテストしてませんが、他のレビュー見るとRT性能測るPortRoyalではRTX3080に普通に負けているそうですので、まあ全部が全部RX6900XT優位というわけではなさそう。

nvidia寄りのFF14ではほとんど差はなくなってますし、これだけの差だとコスパは……、といった感じですね。

RadeonでTensorFlowを使える!tensorflow-directmlがすごいというお話

概要

みなさんDirectMLってご存知ですか?私は今日知りました。その派生Projectのtensorflow-directmlと一緒に。

まだブログに書いていませんが、実は最近Radeon RX6900XTをようやく買うことができ、RTX3080は売ろうと思ったけどTensorFlowは使いたい...。でもROCmは未だにRDNAに対応してないし…。と思っていたところ発見した代物。

DirectMLはMicrosoftが開発しているWindowsとWSLで動く機械学習向けAPIで、DirectX12を介してGPUにアクセスするのでCUDAを使わずにGPU機械学習用途に使えるというスグレモノ(という認識。まだちゃんと調べられてない)。

github.com

そしてtensorflow-directmlはそのdirectmlを利用したTensorFlowのフォークプロジェクト。TF1.15互換で作られており、インストールすると普通のtensorflowとして呼び出せます。TensorFlow2.xへの対応は1.15のプロジェクトが安定したら取り掛かるっぽい感じですので、しばらくは1.15互換で使うことになりそう。

※ 2022/06/23 追記: TensorFlow2対応のDirectML Pluginが公開されました。詳しくはこちらから。 https://hashicco.hatenablog.com/entry/2022/06/23/201222

github.com

機能はまだすべてを網羅しているわけではなく、演算の一部でDirectMLを使えるように調整されているそうです。(TensorFlowに存在する約1100の演算のうち、420をtensorflow-directmlで実装済み。通常のTensorFlowでGPUを利用できる演算は600程度らしいのでそこそこのカバー率? 参考:Roadmap · microsoft/tensorflow-directml Wiki · GitHub

これのすごいところは、DX12が使えるデバイスであればいろんなCUDA非対応のGPUでもTensorFlowに使えること。

GitHubのReadmeに書かれているところでは、下記のグラボを使用可能とのこと。

  • AMD Radeon R5 / R7 / R9 2xxシリーズ以降
  • Intel HD Graphics5xx以降
  • NVIDIA GeForce GTX9xxシリーズGPU以降

つまりは、WindowsユーザーでRadeonIntelのオンボしかGPUを持ってない人がなんとかTensorFlowを早くしたい!というときに使えるパッケージです。RadeonでもVega使ってる人ならLinux+ROCmが第一選択かも?)

ちなみにGeForceであればCUDA ToolkitやcuDNNのインストール無しでGPUを使ってTensorFlowを実行できます!すごい楽ちん!

ただもちろんCUDAを使うよりは遅くなるそうなので、あまりNvidiaユーザーには関係がないかも。また、当然まだPre-releaseなので動作が安定しないこともあるようです。

これを使ってDeepLabCutというTensorFlowを利用した動物の行動解析ソフトを動かしてみたら、なんと未だ動作確認のないRTX3080でもRX6900XTでもあっさり動いたので、そのログをつらつらと書いていきます。

www.mousemotorlab.org

環境

  • Windows10 1909
  • Python 3.6.8 virtualenv (DirectMLのPython対応は3.5, 3.6, 3.7のいずれか)
  • RX6900XT -> ドライバ:20.12.2
  • RTX3080 -> ドライバ:461.09

Microsoft公式の情報は、GitHubかMicrosoftDocsにあります

docs.microsoft.com

DirectMLのインストール

1. まずはPythonの仮想環境を作ります。私はAnaconda使うのやめたのでvirtualenv使います。

  • Anacondaは商用利用無料じゃなくなったから職場で使えなくなったのよね……。もともとpipとの共存に難有りだったから脱出しようと思ってたし、いい機会だったのだけれども。
# 別にディレクトリ作らなくてよければ上2つはいらない
mkdir pyenvs
cd pyenvs
# dlcという名前のディレクトリの中に仮想環境ができます。
python -m virtualenv dlc

2.仮想環境に入る

# activate.batまでのパス。環境によって異なります。
dlc\Scripts\activate.bat

3.tensorflow-directmlのインストール。pypiに登録されてるのでただpipで入れるだけ

pip install tensorflow-directml

4.DeepLabCut関連のインストール。いらない人は入れなくていい。DirectMLで入ったnumpyのバージョンが下がるけど普通に動いたのでヨシ!

pip install wxpython==4.0.7
pip install deeplabcut==2.2b8

DirectMLの確認

pythonシェルに入って以下のコマンドを順番に実行。tensorflow-directmlは普通にTensorFlow(1.15)としてインポートできます。

from tensorflow.python.client import device_lib
device_lib.list_local_devices()

# 以下出力
[name: "/device:CPU:0"
device_type: "CPU"
memory_limit: 268435456
locality {
}
incarnation: 124102394085376839
, name: "/device:DML:0"
device_type: "DML"
memory_limit: 14563195084
locality {
}
incarnation: 5023574286020867491
physical_device_desc: "{\"name\": \"AMD Radeon RX 6900 XT\", \"vendor_id\": 4098, \"device_id\": 29631, \"driver_version\": \"27.20.14501.33001\"}"
]

こんな感じでDMLというデバイスとしてRX6900XTが認識されています。RTX3080も似たような感じで見えます。オンボのGPUがあるときはそちらも表示されるはず。

公式ドキュメントのテストスクリプトを実行するとこんな感じ。ちゃんとDMLを利用して計算しているようです。

import tensorflow.compat.v1 as tf 
tf.enable_eager_execution(tf.ConfigProto(log_device_placement=True)) 
print(tf.add([1.0, 2.0], [3.0, 4.0]))

# 以下出力
2021-01-18 22:03:02.061475: I tensorflow/stream_executor/platform/default/dso_loader.cc:98] Successfully opened dynamic library C:\Users\Owner\pyenvs\dlc\lib\site-packages\tensorflow_core\python/directml.bdb07c797e1af1b4a42d21c67ce5494d73991459.dll
2021-01-18 22:03:02.071278: I tensorflow/core/common_runtime/dml/dml_device_cache.cc:126] DirectML device enumeration: found 1 compatible adapters.
2021-01-18 22:03:02.073470: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
2021-01-18 22:03:02.076668: I tensorflow/core/common_runtime/dml/dml_device_cache.cc:109] DirectML: creating device on adapter 0 (AMD Radeon RX 6900 XT)
2021-01-18 22:03:02.131766: I tensorflow/core/common_runtime/eager/execute.cc:571] Executing op Add in device /job:localhost/replica:0/task:0/device:DML:0
tf.Tensor([4. 6.], shape=(2,), dtype=float32)

DeepLabCutでDirectMLを使ってみる

さてここからはDirectMLを使ってDeepLabCutを使ってみるという話。

Windowsなので普通にGUIを使って行きます。

import deeplabcut
deeplabcut.launch_dlc()

これでGUIが起動するので、いつもどおり設定ファイル書いたりラベリングしたりしてから、Train networkしていきます。

DeepLabCutの今回の設定では、内部的にImagenet学習済みのResNet50の転移学習をしています。

1280x720, 20枚の画像をラベリングし、学習に使用しました。1iterの学習に必要な時間を各GPUで測定し比較してみました。

昔同じデータセット機械学習マシン(過去記事参照。K40Mを載せたCentOS機)で学習させた事もあったので、そちらの結果も載せています。

CPU(windows10, Ryzen 5600X): 2.38 s/iter

K40M(linux, native CUDA, i5-6400): 0.337 s/iter

RTX3080(windows10, directml, 5600X): 0.138 s/iter

RX6900XT(windows10, directml, 5600X): 0.265 s/iter

まあいくらTeslaとはいえKepler世代と比較して、RTX3080がたったの2倍強しか速くなってないのは悲しい。GitHubのIssueに上がっていますが大体DirectMLを使ったときのパフォーマンス低下は2x-3xくらいとのこと。

RX6900XTは14万もしたのにそんなにK40M(1万ちょい)と変わらないじゃん!……と言いつつも、正直インストールもこんなにすんなり行って、ちゃんとCPUよりも早く学習動くならなんにも文句言えないですね。

学習中はきちんとGPU使用率が上がってます。

あとがき

いやーびっくりです。まさかRadeonでこんなに簡単にTensorFlowが動くとは……。DirectML素晴らしい。

DX12を使ってハードウェアOpenで機械学習アクセラレーションができるAPI、というのもとてもいい発想ですねDirectML。これをDirectXの本家本元のMicrosoftが主導しているというのも将来性が感じられて良き。まあDXなので代わりにWindowsに縛られることになるんですが…

これがもっと進化すればCUDAを打ち崩すこともできるのかしら。CUDAに縛られてNvidia一強というのは市場的にも健全じゃない気がするので、ROCmとかこのDirectMLみたいな取り組みには頑張ってもらいたいものです。

エラー出たのでどうにかした話

Tensorflow-Directmlで`DXGI_ERROR_DEVICE_REMOVED`が出てしまうときの対処法 - 端の知識の備忘録

修正

211203 TF互換が1.5と記載されていたのを1.15に訂正しました

AWS Cloud Practitioner とAzure Fundamentals受けてみた

概要

昨年からの仕事の成果をなんかの形にしたいと思い、とりあえず資格をとってみることに。

仕事でクラウドを使えたのは正味2ヶ月くらいなので、初心者もいいところ。ちょうどAzureの初心者資格が無料で受けられるという話をどっかで目にし、これ幸いと受けてみた。

しかし仕事ではメインでAWSを使うので、それに相当するCloud Practitionerも受けることにした。

PearsonのオンラインCBTで受験することができるので、家から一歩も出ることなく2つも資格を取ることができた。出不精の私にとっていい時代になったものだ。

結果的にはどちらも9割近くで合格できたので良かった。次は4月くらいまでにSAA、来年度中にSysOps取りたいなー

まとめ

  • 共通

    • 大きめの布を持っておくといい
      • デスク周りの関係ないもの(2枚目のモニターとかスピーカーとか)を布で覆ってくださいと言われた。最初受けたときは準備してなかったので急いでベッドのシーツを外して使う羽目になった笑
    • Pearsonのチェックは全部チャットでやり取り
    • 準備に20分くらいかかるので少し早めにログインできるようにしたほうがいい
      • 一回スマホで部屋と身分証明書の写真を撮ってアップロード→受験するPCに戻ってテキストチャットしながらカメラで部屋の全景とかデスク周り、腕になにかつけてないかとかをチェックする流れ。
    • CloudPractitionerとAzure Fundamentalsはそれなりにかぶる所も多いので、一方を先に勉強してそれに相当するサービス名や訳語を当てはめれば大体なんとかなる。ただAWSのほうが少し突っ込んだ技術的な問題が多かった気がするので、これより上のレベルの試験ではもっとしっかり勉強する必要がありそう。
  • Azure Fundamentals

  • AWS Cloud Practitioner

    • 無料バウチャーとかは特になし。普通に税込み12100円もかかる
    • ちょっとむずかしい。そこそこ勉強していたつもりだったけど知らないサービスとかあった。問題数も多く、30分くらいかかった。

試験対策

基本はAWSならBlackbeltの資料を、AzureならラーニングパスのAzureの基礎を見て勉強。

あとは少しだけで良いので実際にサービスに触ってみる。VPC作って一通り設定してみたり、パブリックサブネットに踏み台作ってプライベートサブネット内のEC2にアクセスしてみたりといった感じでIaaS系のものは一回触らないとわからない気がする。

SaaS, PaaS系はどういうものかくらいを知っておけばなんとかなる感じ。設定項目が圧倒的にIaaSより少ないので資料眺めるだけで試験対策にはなる。

最後にWeb問題集を無料で公開してくれているサイトがあるので、ここの問題を一通り解いてみてから望みました。

Azure

AWS

頻出ポイントも抑えておくと良い感じ。例えば

とか。

自分的に間違えそうだったところ

  • Azure

    • VPNはAzureへのIngressは無料だがエグレスにはお金がかかる
    • スタンダードサポートの下にベーシックサポートが存在
    • デハイドレート(再水和)という訳語は化学系の人からしたら面食らいそう。ストレージからデータを取り出し可能な状態にすること。
    • セキュリティグループが答えの問題が2個くらい出た。
    • AzureのCloudTrail的なサービスの名前はActivity Log
  • AWS

    • AWS Abuse知らなかった。英語の意味からなんとか答えられたが、不正利用の報告するとこ。
    • AWS Artifactが答えの問題が2問くらい出たのだが、微妙に表現が違っていて同一の答えで良いのかちょっと考えた。
    • Amazon Macieがあんましっくり来てない。こういう個人利用で試すことの少ないセキュリティとかマネジメント系のサービス含めて幅広く出るのでちゃんと一通りサービスには目を通しておく必要がある。