読み書きプログラミング

日常のプログラミングで気づいたことを綴っています

AI PC調査

今年はいよいよAI真っ盛りな一年になりそうです。AlphaGoクローンの移植をきっかけに、せっかく、(学習じゃなくて)推論方面で色々ノウハウを持てたので、応用できたらと推論系調査備忘録。 プラットフォーム iOS/iPadOS macOS Android Windows フラグシップ…

SwiftのenumのrawValueは生の値じゃない

Swiftプログラミング言語が発表されて今年は10年目で、私も10年近く書いてきました。 そんな私が、「今まで何勘違いしてたの?」とショックを受けたことがこれ。 SwiftのenumのrawValueは生の値じゃない まあ、StringをrawValueにできる時点でそういう気はし…

MPSGraphでNeural Engineが動く!

少し前まで、MPSGraphBuilderというプロジェクトを地道に開発していました。github.comCore MLの.mlmodelファイルを読み込んで、MPSGraphを構築するというものです。 対応する層が限定的なものですが、おかげで、囲碁AIのLeela ZeroやKataGoのニューラルネッ…

SwiftUIのpopover

SwiftUIのpopover、なかなか手強いですね。iPadで「できた!」と思ってもiPhoneでポップオーバーじゃなくてシートになったり。 これはiOS 16.4+ではpopoverのコンテントにpresentationCompactAdaptation(.none)修飾子をつけることで解決します。さて、長いテ…

SwiftUIの書き方

久しぶりの記事です。ついに?SwiftUIでUIを書き始めて思うことがあったので書きます。SwiftUIで意味のあるアプリを書こうとすると、@Stateや@Binding、@StateObject/@ObservedObject, @ObservableObject,@EnvironmentObjectと色々なプロパティラッパが出て…

Maxima日本語マニュアルのソース(texi)を公開しました

どうやらMaxima 5.42.2で力尽きたようなので😅、texiファイルを公開しました。github.com奇特な方がおられましたら、forkして引き続き更新いただければ幸いです。

Android版Firefoxでリモートデバッグ

Android版Firefoxのリモートデバッグをしようとしたら苦労したので備忘録です。 ポイント Android版FIrefoxは2020年7月16日現在バージョン68である。 PC版Firefoxは2020年7月16日現在バージョン78である。 バージョンの違いが10あるためこの組み合わせでリモ…

AndroidでTensorFlow Lite

Android版「囲碁の師匠」の検討の着手をしました。最初のマイルストーンは、色々なAndroid用SoCで搭載されつつあるNPUをニューラルネットワークの評価に利用できるかどうかです。 Kirin 990搭載のMatePad Proを購入して挑戦しています。 このページはその備…

iPadOSでポートレートとランドスケープで異なるレイアウトを採用する

iPadのサイズクラスはポートレートでもランドスケープでもwR hRなのでサイズクラスでは表題の件を実現できません。 これについてググると、traitCollectionをoverrideする方法が出てきます。wR hRのサイズクラスを縦横比に従ってwC hRもしくはhCに変えてしま…

囲碁AIアプリの作り方4

追記(2019/02/19) 猛烈に勘違いしていました。 AlphaZeroは、バリューネットワークの出力には[-1,1]レンジを使っていますが、MCTSでは[0,1]レンジだそうです。 talkchess.com 今までのいくつかの謎が氷解しました。 これに合わせてコードのコメントとオリジ…

囲碁AIアプリの作り方4

今日は碁盤描画周りです。間口の一番広いウェブアプリを対象にします。 JavaScriptの碁盤描画のライブラリをまずご紹介します。 eidogo: HTML5以前では事実上のデファクトスタンダードだったオープンソースのウェブアプリです。DOMで描画します。耳赤サイト…

囲碁AIアプリの作り方3

今日はちょっと変わったところで、SGFファイルを扱う方法です。SGFというのは、様々なプラットフォーム上で販売されているSmartGoというアプリケーションのファイルフォーマットです。Smart Game Formatの略で、囲碁以外のボードゲームにも対応可能なフォー…

囲碁AIアプリの作り方2

今日はニューラルネットワーク周りのご紹介です。 前回同様、技術的な話ではないです。どういう材料が利用可能かご紹介します。AlphaGo Zeroは、MCTS、ニューラルネットワーク、強化学習という組み合わせで、0から人類を遥かに超えて学習するAIです。 「莫大…

囲碁AIアプリの作り方1

1日遅れですが、一人アドベントカレンダーを始めます。 (ご協力いただける方、お声がけください) 題して「囲碁AIアプリの作り方」です。 念のため、「囲碁AIの作り方」ではありません。囲碁AI自体を作りたい方はAlphaGo論文などを読んで頑張ってください。 …

AWS LambdaでGnuGo

[追記 2018-11-27] デフォルトの設定では中盤でのGnuGoのestimateがAmazon API Gatewayのタイムアウトである29秒以内に完了しなかったです。AWS Lambdaはメモリを増やすとCPUパワーも増える仕様なので、256MBに増やしたところ、estimateできました。メモリ最…

「囲碁の師匠」絶賛?発売中!

自作のiPadアプリ「囲碁の師匠」が11月16日に発売になりました。以下は紹介ベージです。 https://new3rs.github.io/a_master_of_go/index.ja.html ご興味お持ちいただけたら幸いです。

iOSアプリのシンプルなプライバシーポリシー

この度、iOSアプリを一つ申請し承認いただきました。(契約関係でトラブっていてまだApp Storeには掲載されていません) 6年ぶりのiOSアプリ申請で色々新鮮でした。 中でもすべてのアプリにプライバシーポリシーURLの掲載を求められたことがびっくりしました。…

クラウドでLeela Zeroを動かしてローカルのLizzieで見る

以前、VPSサービスGPUEaterでLeela ZeroとLizzie動かす方法を紹介しました。nextliteracy.hatenablog.comVPSにVNCで繋いて、VPS側でLizzieを動かす方法でしたが、この方法だとVPS側にデスクトップ関連のインストールする必要があってその時間が比較的長く、…

SwiftでSGFをパースしたりその逆をしたりするライブラリを公開しました

github.com

Maximaマニュアルを5.42.0に更新しました。

maxima.osdn.jp置換用パッケージcombinatoricsと最悪ケース解析パッケージwrstcseが追加されましたね。 稚拙な訳ですがご活用ください。

Leela ZeroのウェイトをCore MLで計算させる

AZ.jsをSwiftに移植しました。その際に、Leela ZeroのウェイトをCore ML上に移す作業があったのですが、ハマり所があったので、備忘録です。Leela Zeroのウェイトは、leela-zeroレポジトリのtraining/tfフォルダ以下のスクリプトを使って、TensorFlowに読み…

GeForce RTX 2080 Tiは2枚でAlphaGo Readyと言えるかも(言えないかも)

追追追追記 2019/09/23 Leela Zero 40bがV100で2219プレイアウト/秒出るそうです。20bなら雑に2倍して4438プレイアウト/秒、INT8で2倍になるとして8876プレイアウト/秒。 2枚あれば16000プレイアウト/秒以上出ますね。 V100相当のTuringカードがあれば2枚でA…

GPUEaterでLeela Zeroを動かす

追記 2018/10/06 Leela Zeroのコンパイル手順が古くなっています。 GitHub - gcp/leela-zero at nextの記述に従ってください。 GPUEaterというGPUサーバーレンタルサービスがあります。www.gpueater.comRX Vega 56などハイエンドのPCやワークステーションに…

囲碁AI AZ.js

A9.jsとA19.jsはコードがほとんど同じだったのですが、碁盤サイズに定数を使っていたため、別のレポジトリとして作りました。 メンテの意味でもそれはあまりに残念なので、コードをマージしてリファクタリングしてドキュメンテーションを充実させたAZ.jsを公…

囲碁AI A19.js

以前にA9.jsというブラウザ上で遊べる9路盤囲碁AIを公開しました。 今日は、これの19路盤版、A19.jsを公開しました。 FacebookのELF OpenGoのニューラルネットワークを使っています。iMac Late 2012(GTX-660M)でニューラルネットワークの評価は380ms前後でし…

WGoエディタ再び

2年弱前にWGoエディタというものを作りました。nextliteracy.hatenablog.com新興アプリSabakiが良さげだったので開発をやめました。見立てもよかったようで、今、Sabakiは結構人気のアプリになったようです。 SabakiはLeela/Leela Zeroを使った検討機能も拡…

AlphaGoまとめ

AlphaGo Fan AlphaGo Lee AlphaGo Master AlphaGo Zero (20b) AlphaGo Zero (40b) AlphaZero (20b) ELF OpenGo v1 ELF OpenGo v2 PhoenixGo KataGo 評価ハードウェア 1202 CPU & 176 GPU 48 TPU v1 4 TPU v1 4 TPU v1 4 TPU v1 4 TPU v1 1 V100 1 V100 Tesla…

Meteorを使ったリアルタイムアプリのためのデータ構造

Meteor歴5年で今更感があるのですが。Meteorといえばリアルタイムアプリがターゲットのウェブプラットフォームです。 クライアントとサーバーのDBの同期やリアクティブなレンダリングはとても重宝しています。さて、MeteorのDBのクライアント-サーバ同期の単…

macOS(High Sierra)でTensorFlowをコンパイルする

古いiMac(2012)を使っているのでGPUが馬力がないので、CPUでもIntel MKLを使って高速化をすべく、macOS(High Sierra)でTensorFlowをコンパイルしようとしたら嵌りました。TensorFlowはコンパイル時にデフォルトのApple clangを使うのですが、このclangはOpen…

Web WorkerのためのRemote Method Invocation(RMI)

表題のライブラリを作成しました。 github.com 山口さんが開発されたPyaq(https://github.com/ymgaq/Pyaq)という9路盤の囲碁AIをJavaScriptの移植(A9.js)したのですが、そのときに、 UIのレスポンスを維持するためにAIの演算はワーカーで実行したい でも、ワ…