pandas.rolling.apply で行を渡す
import pandas as pd def f(v): print(v) return 1 rol = pd.DataFrame([[1,2],[3,4]]).rolling(2, method="table") rol.apply(f, raw=True, engine="numba", engine_kwargs={'nopython': False, 'nogil': False, 'parallel': False} )
解決!プロバイダを変えたらGoogle(等)以外のサイトにつながらなくなった件
世間のポイ活ブームに乗り遅れないために「楽天ひかり」に乗り換えました。
楽天推奨の新しいWifiルーター(バッファロー製)も購入し、当日妻は有給休暇を取り、ネコに餌もやり、万全の体制で迎えました。
しかし(予想通り)トラブルが発生しました。
現象:Google, Youtube, LinkedIn, yahoo.comといった大手サイトは接続できるが、それ以外のサイトがつながらない。
ググったところ、IPv6まわりが問題っぽいことがわかったのですが、バッファローのヘルプページの手順を踏んでもうまくいきません。
そんななか楽天ひかりのサポートに電話したところ、次のような回答。
「IPv6の開通はたいてい数週間後になるよ」
なんてこったい。。。
そこで、バッファロールーターの設定画面から、以下の画面のように「IPv6を使用しない」という設定をしました。
設定後、しばらく待つと(数分くらい?)、ログイン画面が現れました。ここで楽天ひかりから送付された ユーザー名とパスワードを入力すると・・・、無事に開通しました!やれやれ。
プロバイダ乗り換えたら、しばらくはIPv6をオフにする設定が必要みたいですね・・・。
注:なお、ルーター本体にあるスイッチを 「AUTO」から「MANUAL」に変える必要があります。そうしないと、上で説明した設定ができません。
dockerでpip installした構成を永続化したい
dockerのコンテナの中で、pythonまたはjupyter notebookを動かしている場合、コンテナの中で pip install
して作った環境を使いまわしたいことがあります。
コンテナは一時的なものですから、コンテナが削除されると pip installして作った環境は消えます。
$ docker run <とあるイメージ> -it /bash/sh $$ pip install numpy # dockerの中でインストール $ docker stop <ID> $ docker rm <ID> $ docker run <とあるイメージ> -it /bash/sh $$ pip list ... numpy は存在しない
コンテナ内で作った環境を使いまわしたいときは、そのコンテナをコミットして、イメージにしておくと良いです。で、新しく作ったイメージからコンテナを立ち上げると、インストール済みの環境でリスタートできます。
$ docker run <とあるイメージ> -it /bash/sh $$ pip install numpy # dockerの中でインストール $ docker stop <ID> $ docker commit <コンテナの名前> <新しいイメージの名前> $ docker run <新しいイメージ> -it /bash/sh $$ pip list ... numpy がインストール済み!
dockerの中からコンテナIDを取得する方法
簡単です。docker内のシェルから、/proc/self/cgroup
を確認しましょう。
$ more /proc/self/cgroup
Physical Review の投稿画面でのLatexエラーの回避の方法
Physical Review に投稿する際、テキトーにtexファイルをアップロードすると、エラーが出て困ってしまう。
例えば、こんなエラーメッセージ
Classification description value must be selected for each file and cannot be left unknown.
これは、ファイルの役割を指定してないときに出るエラーである。 ファイル一覧の画面で、こんなテーブルが表示されてると思うのだが、Descriptionのカラムにファイルの役割が設定されている必要がある。
この例だと、"apssamp.tex"が、"Main text file" (メインのTexファイル) と指定されているわけだ。
設定は以下のボタンから進める。
ちなみに、メインのTexファイルから、 inputコマンドで別のtexファイルを読み込んではいけないらしい。
やや面倒だが、投稿する際には、inputで読み込んだ内容をすべてメインのtexにコピペしておく必要がある。
また、bibtexを使っているときは、コンパイルされたbblファイルをメインのTexファイルにコピペしておく。
どうもディレクトリ構造も無視されるので、画像もメインのTexファイルと同じディレクトリに展開しておく必要があるようだ。
2021年8月現在では、OverleafのSubmit機能からサブミット用のフォルダを自動作成できないので、手作業でやらざるを得ない。ArXivはできるのにね。
もっと簡単な投稿方法があればぜひ教えて下さい。
Guild AI でタスクを並列に走らせて高速化
コア数が多いマシンを使っているときは、実験パラメータが異なるタスクをパラレルに実行したくなります。
昨日紹介したGuild AIは、シリアルな実行しかサポートしてませんが、キューを複数立ち上げるという回避策で、パラレルな実行ができます。
```キューを10個立ち上げる。
$for _ in `seq 10`; do guild run queue --background -y; done
パラレルに走らせたいタスクをステージング
$ guild run <task>
$ guild run <task>```
ひとつのキューがひとつのプロセスになっているようなので、これで、ステージングされたタスクがパラレルに実行されます。
タスクを走らせ終わったら、キューをストップします。
```
guild stop -o queue
```
元ネタ
Running cases in parallel - General - Guild AI
Guild AIの雰囲気をつかみたいかたは、こちらをご参照ください。
Guild AI で機械学習の実験管理を整然と行いたい
機械学習の実験は、たくさんの設定値やハイパーパラメータをゴニョゴニョしていくので、結果の管理が大変です。
いろいろ調べて良さそうだったので、GuildAI使ってみました。
良さそうだった理由
- 簡単そう
- Jupyter Notebookと相性が良さそう
- 実験の再現が簡単そう
- 無料
今後に期待?
- 実験結果を数値だけでなく、画像やベクトルも管理できるようにしてほしい(できるのかもですが)
ただし、トラブったときにググってもあんまり情報出てきません。ある程度の自己解決できる中級者以上の方に向いているかもですね。*1
私はJupyter notebookで実験しています。
おおまかな流れ
コード書く→Guild AIを意識する部分は、設定をグローバル変数にしておくのと、結果を key:value でprint することだけです。便利。
- Jupyter notebookで実験用のコードを書く
- 実験の設定はグローバル変数にしておく→Guild AIがうまいことしてくれる 例: learning_rate = 0.01
- 実験結果は key:value 形式で printしておく→Guild AIがうまいことしてくれる 例:print("accuracy: {}".format(acc))
- 設定値を決めてguildaiから実験する。こんなかんじ `guild run file.ipynb param1=[1,2] param2=2`
- guild compare コマンドで、実験結果を比較する: guild compare ちなみにCSVにも書き出せる。
guild compare --csv runs.csv
- tensorboardが好きな人は guild tensorboard
ハマるポイント
Jupyter notebookのセルで最終行をコメントアウトしてはだめ。エラーで落ちる。(おそらくバグ)
Scalarをkey:value 形式でprintするとき、keyにスペースいれたらだめ。(仕様)
かっこいいUIで実験結果を見たいのはわかるが、うまくいかないときには無理しない。guild compare --csv xyz.csvで書き出したほうが早い気がする。
*1:私も最初からGuildAIのバグの影響をもろかぶりして、原因解明に1時間くらいかかりました。バグの原因はIssueとして報告しときました