Magicodeはipynb形式で記事を執筆しコードの実行も行うことができ、非常に便利なサービスです。
記事を書こうと思ったときに、とても重い処理を書いてもいいのだろうかと疑問に思い、コードの実行環境にどのような制約があり、どこまでできるのかを調べてみました。
まず手始めに、以下のshellを実行してみます。
現在のディレクトリの場所を教えてくれるshellです。
実行すると、/home/jovyan
とわかりました。
ユーザー名にjovyanが割り当てられているようです。
現在のディレクトリ内のファイルを教えてくれます。
デフォルトで、requirements.txt test.ipynb
の2つのファイルがあります。
test.ipynb
が今執筆しているノートブックです。
requirements.txt
はノートブックの起動時に自動的にpip installしてくれるライブラリをまとめて記載するためのファイルです。
cat を使用してrequirements.txt
の中身を見てみます。
pandas
やnumpy
、scikit-learn
など分析用や計算用のライブラリのほか、seaborn
など可視化のライブラリも入っています。
/bin/
配下に実行可能なshellコマンドが格納されているので、ls
コマンドを使用して確認してみます。
ファイルを操作するような標準的なコマンドは使用することができることが分かります。
実行速度の確認のために、以下のgithubソースを使用します。
実行させる回数が多いと完了まで時間がかかるので、ループ回数を100000から1000に変更しています。
https://github.com/morikatron/snippet/blob/master/benchmark/simple_python_bench.py
ソースの中で、5つ指標を出力し多角的に実行速度を確認することができます。 また、platform
とpsutil
ライブラリを使用して実行環境も取得してくれます。
まず関数化された計算処理部分を実行します。
上で定義した関数を使って計算し、result.txt
に結果を出力します。
出力結果を確認します。この結果は、後でGoogle Colabと比較します。
実行環境もresult.txt
に出力してくれています。私が実施したタイミングで内容を確認すると、Linuxはdebianで4core、メモリは16GBのリソースが存在することが分かります。
実行リソースはユーザー個別で仮想的に分割されて使用できるのかもしれません。
Colab上でもshellを実行して比較してみます。また、実行速度を比較します。
Colab上で実行した結果は以下のようになります。
Colab上の実行結果は以下のようになりました。 Magicodeと並べて比較してみます。
Python:
- Python: 3.7.13 (CPython)
- Build: ('default', 'Apr 24 2022 01:04:09')
- Compiler: GCC 7.5.0
PC Info:
- OS: Linux-5.4.188+-x86_64-with-Ubuntu-18.04-bionic
- Processor: x86_64
- Core: 1/2
- Freq(MHz): None
- Memory: 13GB (13,617,745,920 Byte)
loop_test: 0.026299999999999997 ms
function_call_test: 0.11679999999999999 ms
print_test: 74.2027 ms
calc_julia_set: 4593.1935 ms
Thread: 20.3976 ms
Process: 277.7211 ms
Python:
- Python: 3.7.12 (CPython)
- Build: ('default', 'Oct 26 2021 06:08:53')
- Compiler: GCC 9.4.0
PC Info:
- OS: Linux-5.4.0-107-generic-x86_64-with-debian-buster-sid
- Processor: x86_64
- Core: 4/4
- Freq(MHz): scpufreq(current=2599.999, min=0.0, max=0.0)
- Memory: 16GB (16,786,288,640 Byte)
loop_test: 0.016700000000000003 ms
function_call_test: 0.073 ms
print_test: 66.21579999999999 ms
calc_julia_set: 2744.2662 ms
Thread: 12.8452 ms
Process: 136.38240000000002 ms
以下のリストに私が実行した時点のMagicode実行結果を載せています。Magicodeはリソースが共有されている場合、時間やタイミングで結果がかなりぶれる可能性もあります。参考としてデータを見ることをお勧めします。
ほとんどの指標でMagicodeの方が良い結果となりました。Colabに割り当てられるCPUコア数がMagicodeと比較して少ないことも影響していそうです。
CPUだけの処理をする場合、Colabよりも早い可能性が高いですがその差は顕著でもないため、好みのレベルになるかも知れません。
指標 | Magicode | Colab |
loop_test: | 0.0167 ms | 0.026299ms |
function_call_test: | 0.073 ms | 0.116799ms |
print_test: | 66.2158 ms | 74.2027ms |
calc_julia_set: | 2744.2662 ms | 4593.1935 ms |
Thread: | 12.8452 ms | 20.3976 ms |
Process: | 136.3824 ms | 277.7211 ms |
Magicode上の実行環境は固定ではなくかなり幅を持って変更されているような挙動が見られました。(一時的に、750GBのメモリが割り当てられたような結果が出たことがありました。)
挙動を知るために、複数回の実行速度結果をまとめて残すことにします。
Python:
- Python: 3.7.12 (CPython)
- Build: ('default', 'Oct 26 2021 06:08:53')
- Compiler: GCC 9.4.0
PC Info:
- OS: Linux-5.4.0-107-generic-x86_64-with-debian-buster-sid
- Processor: x86_64
- Core: 4/4
- Freq(MHz): scpufreq(current=2599.999, min=0.0, max=0.0)
- Memory: 16GB (16,786,288,640 Byte)
loop_test: 0.0165 ms
function_call_test: 0.07399999999999998 ms
print_test: 69.3745 ms
calc_julia_set: 2821.5529 ms
Thread: 13.8477 ms
Process: 148.4952 ms