M1 MacBookProにTensorflowをインストール

以下の記事を参考にしてM1 MackBookProにTensorflowをインストールする。

pub.towardsai.net

MiniForgeのインストール

前提としてX-code、pipなどはインストール済みとする。

以下のサイトから https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-arm64.sh をダウンロードし、実行する。

github.com

$ bash Miniforge3-MacOSX-arm64.sh

環境をアクティベート

まずは以下を実行して、環境を作る。

$ conda create --name tensorflow_silicon python=3.9

ここで、別のターミナルを開けて、以下のコマンドを実行する。別ターミナルにしないと"conda install -c apple tensorflow-deps"の実行でエラーが起きる。

$ conda activate tensorflow_silicon
$ conda install -c apple tensorflow-deps
$ pip install tensorflow-macos
$ pip install tensorflow-metal

これだけ。

プログラムの実行

ターミナルで以下のコマンドを実行した後、プログラムを走らせる。

$ conda activate tensorflow_silicon

Multipassの基本

M1 MacBook ProではVirtualboxのarm非対応問題により、Vagrant が使えない*1ため、Multipassを試している。

Install

インストールは以下。qemuのインストールにはM1版のhomebrewが必要。

$ brew install --cask multipass
$ brew install qemu

Find

インストールできるインスタンスのリストを表示。

$ multipass find
Image                       Aliases           Version          Description
18.04                       bionic            20220615         Ubuntu 18.04 LTS
20.04                       focal,lts         20220615         Ubuntu 20.04 LTS
21.10                       impish            20220616         Ubuntu 21.10
22.04                       jammy             20220616         Ubuntu 22.04 LTS
anbox-cloud-appliance                         latest           Anbox Cloud Appliance
charm-dev                                     latest           A development and testing environment for charmers
docker                                        latest           A Docker environment with Portainer and related tools
minikube                                      latest           minikube is local Kubernetes

Launch

必要に応じて init.ymlファイルに初期設定を記述する。

$ cat init.yml
# cloud-config
repo_update: true
repo_upgrade: all

# install packages
packages:
 - build-essential
 - bison
 - flex
 - binutils
 - libreadline-dev
 - zlib1g
 - zlib1g-dev
 - libssl-dev
 - gdb
 - git

以下のようにインスタンスを生成+起動する。

$ multipass launch 22.04 --name ubuntu22 --mem 4G --disk 20G --cloud-init init.yml

Shell

インスタンスへのアクセスは以下のようにする。

$ multipass shell ubuntu22

List

手元のインスタンスのリストを表示する。

$ multipass list
Name                    State             IPv4             Image
ubuntu22                Stopped           --               Ubuntu 22.04 LTS
ubuntu22dev             Stopped           --               Ubuntu 22.04 LTS

Start & Stop

インスタンスの開始と停止は以下:

$ multipass start ubuntu22

$ multipass stop ubuntu22

Disk領域の拡張

qemu-imgでサイズを変更する。

$ multipass stop ubuntu22
$ sudo su -
$ cd /var/root/Library/Application\ Support/multipassd/qemu/vault/instances/ubuntu22
$ '/Library/Application Support/com.canonical.multipass/bin/qemu-img' resize ubuntu-22.04-server-cloudimg-arm64.img 22G

CPU数とメモリの変更

インスタンスを停止し、以下のコマンドを実行。

$ sudo launchctl unload /Library/LaunchDaemons/com.canonical.multipassd.plist

以下のファイルで、対応するインスタンスのnum_coresとmem_sizeを変更する。

$ sudo vi /var/root/Library/Application Support/multipassd/qemu/multipassd-vm-instances.json

最後に以下を実行。

$ sudo launchctl load /Library/LaunchDaemons/com.canonical.multipassd.plist

 インスタンスのコピー

できるのかな?調査中。

Delete & Purge

インスタンスの削除は以下:

$ multipass delete ubuntu22
$ multipass purge

参考

*1:parallelsなど使えば動くが有償ソフトはなるべく避けたい。

Error: Cannot install in Homebrew on ARM processor

M1 MacBook Proを買って、これまでのIntelMacBook Proからデータ移行して使っている。

ほぼすべてのデータが初期設定時に移行でき、FirexfoxやThunderbirdはもとより、自分で入れた開発環境(pythonやgoなど)さまざまなプログラムもほぼ無修正で動作した。セットアップに時間を取られると覚悟していたが、嬉しい誤算であった。唯一、VirtualboxのARM未対応問題でVagrantが動かない。

さて、Vagrantの代わりとしてUTMとMultipassを試しているが、ここでhomebrewの問題がでた。 具体的にはqemuというパッケージをbrewでインストールしようとしたら、エラーが発生した。

$ brew install qemu
Error: Cannot install in Homebrew on ARM processor in Intel default prefix (/usr/local)!
Please create a new installation in /opt/homebrew using one of the
"Alternative Installs" from:
  https://docs.brew.sh/Installation
You can migrate your previously installed formula list with:
  brew bundle dump

解決策は以下に書いてあった。

https://shiro-changelife.com/error-cannot-install-in-homebrew/

$ sudo su -
$ cd /opt
$ mkdir homebrew && curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew
$ exit
$ sudo chown -R $(whoami) /opt/homebrew

最後に~/.bash_profile でPATHに /opt/homebrew/bin を追加。

ロシアによるウクライナ侵攻

Covid-19は数ヶ月で世界を不可逆的に変えたが、今回のロシアによるウクライナ侵攻はわずか2日で世界を不可逆的に変えた*1

冷戦後の平和な時代は終わり、また戦争の時代に入った。これはロシアが崩壊して全核兵器が放棄されるまで続くだろう。 冷戦後のロシアへの対応は甘かった。今度は欧米はロシアが崩壊するまで100年かかろうと確実に潰しに行くだろう。これからの時代はそういう時代である。

初めは足並みが揃わなかったヨーロッパ諸国だったが、ウクライナのザレンスキー大統領の5分間の演説で一気に対ロシアに傾いたという。

www.washingtonpost.com

紀元前から侵略略奪が続き、中世から近代を経ても常に国家間の争いが絶えなかったヨーロッパ諸国が、この二日間で一気に対ロシアで団結してしまった。驚くべきは、永世中立国のスイスがロシアの金融制裁に加わった。これらの動きは「ヨーロッパの覚醒」とも言われている。

www.youtube.com

twitter.com

もちろん、欧米がこれまで無視もしくは加担してきた様々な虐殺、ここ10年でもシリア、ISIS、ミャンマー、イエメン、ガザと続いた惨劇で失われた何百万の命と、ウクライナ侵攻の被害者の命に軽重がつけられているように感じるのは私だけではないだろう。実際、ウクライナからの黒人難民がポーランド入国を拒否されているなど、欧州のやることは決して綺麗事だけではない。 さらに過去に遡れば南米、アジア、アフリカなどでやってきた暴虐を棚に上げて何を被害者ぶっているんだという意見も、私個人としては同意する。

twitter.com

しかし今、2022年2月28日時点で、キューバ危機以来の核戦争の可能性が高まっていることを考えれば、欧州諸国の総合力に期待するしかない*2

BBCでは今日からいきなり原爆についての説明や専門家の話がガンガン流れている。現実のリスクとして認識しているわけだ。

個人的には、311での原発事故時の異常な緊張と同じものを、ここ数日感じている*3

BBCやCNN、その他世界各国のニュースをライブで流しっぱなしにしている。この緊張がどれだけ続くのかわからない。

*1:私はコロナ前にスイスに入国し、それから日本に戻っていない。この夏に一時帰国しようと思っていたが、今はコロナだけでなく航空券が入手できるかどうかを気にしなければならなくなった。

*2:突き放して言えば、自分たちの問題は自分たちで解決しろ、世界を巻き込むな、という話でもあるのだが。

*3:思えば、多くのキーフ(ウクライナ読み)の人たちはチェルノブイリ事故を経験し、今また核戦争の危機に晒されているわけだ。これはとても大変なことだ。

AIネイティブ世代

80年代後半の第2次AI黄金時代に教育を受け、その後の長い冬の時代を知っている世代*1としては、基本的にはAIに対する態度はとても慎重で懐疑的である。

実際、当時のAIは期待先行で実態はショボかったから、膨らみすぎた期待が弾けた瞬間に分野自体も終了したのは当然といえば当然である。そして、その栄枯盛衰をみれば懐疑的になるのも道理である。

ところが現在の第3次AI黄金時代は、期待を超えた結果が次々と現れる驚異の時代であり、旧世代からみても長らく持っていたネガティブな固定観念を覆すに十分な技術的ポテンシャルがある。

世界中の大学でAI関係の授業があり、すでにAI技術ネイティブの卒業生が世界中のIT業界はもとより全産業界に散らばり始めている。あと5年もすればUnder30はAIネイティブ世代になっている。10年もすれば脂の乗った働き盛りの連中は皆AIネイティブ世代になっている。 前のAI時代と異なり今回のAIブームが恐ろしいのは、あと10年たっても下火になっている様子が想像できないことだ*2。だから前のAI時代のようにAIに参入した才能が無駄になることは決してない。それどころか改革を加速していくだろうと予想している。

ということで、唐突ながらpg_plan_inspectorに”Self-Driving DBMS”のワードを入れた。

github.com

胡散臭く感じるかもしれないが、他業種がコンピュータによる設計、制御、管理を数10年前*3から取り入れているにもかかわらず、肝心のコンピュータ業界自体が未だにアナログな設計論と実装論、運用論に止まっているのはおかしいと素朴に思う。

現役でいられるのはあと5年くらい、というか5年くらいで引退したいのであるが、それまで先端で活動するためにはAIの勉強が必須なので、落ちこぼれないようにコツコツとお勉強しております。

*1:超優秀な同級生や先輩たちが当時のAI分野に飛び込み、才能を無駄使いして討死していったのを観てきた。

*2:産業構造も以前とはかなり異なるように見える。以前は例えばLispマシーンやConnection machineなどハード屋がシステム開発して販売してユーザが使う的なものだったが、現代ではGoogleやTeslaなどユーザ自身がハードまで開発している。もちろんNVDIAみたいなのがまだまだ主流だけども。

*3:CADなんて80年代には普通に建築分野で使われているのに、IT業界ではまともな設計支援ツールが未だ登場していない。開発はアジャイルって中世の丁稚制と何が違うのかというレベルに留まっており、未だサイエンスもエンジニアリングも欠片も存在しない。

中高年からの英作文

ネットにリスニングやスピーキングの勉強方法は山ほどあるが、英作文の勉強法はあまりないようなので、個人的な経験を書く。

当方、中一で三単現の変化を間違いまくって以降、英語が大嫌いになり今でも大の苦手だが、それでも老年近くになってから英作文を学び直し、ここ数年は欧州住みで日本人のいない現地企業で働いている。 といっても、しょせん高校英語レベルである。

文法

まずは中学の英文法を学び直す。5文型、時制、関係代名詞・関係副詞など。 超簡単な英文法を復習した後、以下の本を読んで例題を解きまくった。 これは世界的なベストセラーで、見開き2ページに図例を豊富に使った文法解説と数10問の例題がある。 個人的には時制、とくに完了形の説明が豊富でわかりやすかった。日本語版も出ているはず*1

  • "English Grammar in Use", Raymond Murphy

英作文

文法を軽く復習したら、次に以下の本を読むことを勧める(文法の学習と並行でも可)。これを3日読んで例題を解くだけで「自分でも英作文ができるようになるかも」と思える。 極論すると英作文は主語と動詞をどう選ぶかなのだが、英語特有のスタイルについて簡潔に説明してあり、 英語嫌いの自分でもこれは面白いと思えた。

  • 「英語らしい英文を書くためのスタイルブック」研究社 富岡龍明

次いで、以下の英語で書かれた英作文のドキュメントを何回か読んだ。 そもそも英作文の目的が自分で書いた日本語の技術文書を英語にすることだったので、即実践に移したわけだ。 linkは張らないけども、以下のタイトルのpdfを検索すれば見つかるはず。

  • "English for Research: Usage, Style, and Grammar"
  • "English for Writing Research Papers"
  • "Clarity in Technical reporting"

そのどれもがとても簡潔な英語で、しかも豊富に例文を使って説明しているので、非常に勉強になる。

これらを参考にしつつ、自分の興味のあることを書き続ける。続けていれば自分が使うパターンや構文、言い回しなどが身についてくる。

まずは3日続けることを目標に。次は3週間、次に3ヶ月。3ヶ月続ければかなり英作文力が身に付く。とにかく3ヶ月続ける。

うまい英文を書こうとしない。母語である日本語以上にうまくかけるはずがないのだから、まずは数をこなすことに注力する。

ちなみに以下は昨年知ってダウンロードしただけでほとんど読んでいないが、これも良さげである。

  • "WRITING AND PUBLISHING SCIENTIFIC PAPERS"

校正

Lang-8 などでネイティブスピーカーに校正してもらう。 最初は他人に自分の英文を見せることに抵抗があるが、「母語であっても誤字脱字言い間違いがあるのだから、英文に間違いがあるのは当たり前」と思えるまで続ける。 抵抗が無くなればあとはどうにでもなる。

本格的な文章を書く場合は、費用を惜しまず英文校正会社に依頼する。

Grammarlyは無料で使えるので活用する。1-Checkerも精度はイマイチだが使えないことはない。

Gemini 一択。無料版でOK。

Proofread grammatically "xxxxx"

と、校正したい文章を入力するだけで、かなり品質の良い校正をしてくれる。 校正しすぎで原型をとどめない場合もあるが、そういう場合は"but don't change xxx" など、 使いまわして欲しい言い回しを変えないように指示できる。

個人的にはchatGPTとclaude.aiよりも英語の校正に関しては Geminiの校正がよい感じ。 性能は時事刻々変わるので、時々チェックし直すことを推奨。

ネイティブが使う言い回しを常にチェックする。これは検索サイトだけでなく、以下のようなサイトも使える。

*1:例題の解答あり版となし版があるので注意。

BayesCardセットアップの注意点

BayesCardというベイジアンネットをベースとしたCardinality Estimationを行うシステムを試してる。

github.com

pythonのモジュール

使用にあたり、pythonのモジュールでちょっとハマったので備忘録として書いておく。numpyのバージョンに注意*1

それとspflowのインストールを忘れずに。

pip3 uninstall numpy
pip3 install numpy==1.19.2
pip3 install networkx
pip3 install numba
pip3 install pgmpy
pip3 install pomegranate==0.13.2
pip3 install sqlparse
pip3 install tables
pip3 install spflow
IMDBデータ

これもIMDBデータを使う。READMEにあるように、 http://homepages.cwi.nl/~boncz/job/imdb.tgz  をダウンロードし、 imdb-benchmarkというディレクトリ に展開しておく。

imdb-benchmarkはBayesCardと同じディレクトリ に作成する。

$ git clone https://github.com/wuziniu/BayesCard.git
$ mkdir imdb-benchmark 
$ cd imdb-benchmark
$ tar xvfz imdb.tgz

*1:pomegranateのバージョン依存性解決のため。