Google Colabを用いたNDLOCRの実行にかかる時間について
先日、以下の記事を執筆しました。
今回は、Google Colabを用いたNDLOCRの実行にかかる時間について、かんたんな調査を行なったので、その結果をまとめます。
設定
GPUは以下です。
Fri Apr 29 06:26:29 2022 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 460.32.03 Driver Version: 460.32.03 CUDA Version: 11.2 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla V100-SXM2... Off | 00000000:00:04.0 Off | 0 | | N/A 35C P0 23W / 300W | 0MiB / 16160MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+
以下の画像を用いました。サイズは5000 x 3415 px で、 1.1 MB でした。
https://dl.ndl.go.jp/info:ndljp/pid/3437686/6
推論の処理内容として、以下の4つがありますが、今回は「レイアウト抽出」と「文字認識(OCR)」のみを実行しています。
- '-p 0': ノド元分割
- '-p 1': 傾き補正
- '-p 2': レイアウト抽出
- '-p 3': 文字認識(OCR)
Googleドライブの場合
マウントしたGoogleドライブをファイルの入出力に使用する場合について考察します。以下の入力オプションを使用します。
Sigle input dir mode(-s s
で指定)※デフォルト
1ファイルを対象に実行したところ、以下のような結果になりました。
ID | 処理 | タイムスタンプ | かかった時間(秒数) |
---|---|---|---|
p1 | 開始 | 2022-04-29 05:30:58 | 11 |
p2 | 推論の開始 | 2022-04-29 05:31:09 | 2 |
p3 | 終了 | 2022-04-29 05:31:11 | (合計) 13 |
p1からp2までの間は設定ファイル等のロードを行なっている時間です。画像に対する推論時間は2sでした。
同じ画像をもう1件登録して、2ファイルを対象に実行しました。
ID | 処理 | タイムスタンプ | かかった時間(秒数) |
---|---|---|---|
p1 | 開始 | 2022-04-29 05:38:02 | 10 |
p2 | 推論の開始 | 2022-04-29 05:38:12 | 6 |
p3 | 終了 | 2022-04-29 05:38:18 | (合計) 16 |
さらに、同じ画像をもう1件登録して、3ファイルを対象に実行しました。
ID | 処理 | タイムスタンプ | かかった時間(秒数) |
---|---|---|---|
p1 | 開始 | 2022-04-29 05:40:26 | 10 |
p2 | 推論の開始 | 2022-04-29 05:40:36 | 8 |
p3 | 終了 | 2022-04-29 05:40:44 | (合計) 18 |
上記の結果から、設定ファイルの初期ロードに10s程度かかり、各画像に対して、2~3s程度の処理時間がかかることがわかります。
冒頭で共有した私が作成したノートブックでは、複数の入力画像があっても、以下のオプションにより、画像ファイル毎にプログラム main.py を実行するようにしていました。
Image file mode(-s f
で指定) (単体の画像ファイルを入力として与える場合はこちら)
このことから、各画像ファイルに対して、1ファイル目を除き、初期ロードに要する10s程度の時間が不要にかかっていることになります。
実際、 Image file mode を用いて2つのファイルを対象に実行したところ、 Sigle input dir mode に比べて、ちょうど10s(初期ロードに要する時間)増加していることが確認できました。
ID | 処理 | タイムスタンプ | かかった時間(秒数) |
---|---|---|---|
p1 | 1ファイル目の開始 | 2022-04-29 05:52:59 | 11 |
p2 | 推論の開始 | 2022-04-29 05:53:10 | 2 |
p3 | 終了 | 2022-04-29 05:53:12 | 1 |
p4 | 2ファイル目の開始 | 2022-04-29 05:53:13 | 10 |
p5 | 推論の開始 | 2022-04-29 05:53:23 | 2 |
p6 | 終了 | 2022-04-29 05:53:25 | (合計) 26 |
(当たり前のことではありますが、)処理対象の画像数が多い場合には、 Sigle input dir mode を使用することをお勧めします。
(参考)GCS(Google Cloud Storage)の場合
今回は、Google ColabからマウントしたGCSを使用した場合についても計測してみました。各種設定によって結果は変わってくると思いますが、上述したGoogleドライブとの比較が目的です。
以下の入力オプションを使用します。
Sigle input dir mode(-s s
で指定)※デフォルト
1ファイルの場合
ID | 処理 | タイムスタンプ | かかった時間(秒数) |
---|---|---|---|
p1 | 開始 | 2022-04-29 06:06:08 | 13 |
p2 | 推論の開始 | 2022-04-29 06:06:21 | 13 |
p3 | 終了 | 2022-04-29 06:06:34 | (合計) 26 |
2ファイルの場合
ID | 処理 | タイムスタンプ | かかった時間(秒数) |
---|---|---|---|
p1 | 開始 | 2022-04-29 06:04:08 | 12 |
p2 | 推論の開始 | 2022-04-29 06:04:20 | 27 |
p3 | 終了 | 2022-04-29 06:04:47 | (合計) 39 |
初期ロードの時間はあまり変化がありませんが、1画像あたりの処理時間が約5倍程度になりました。推論結果の画像やテキストファイルの保存に時間を要していました。
(これも当たり前のことではありますが、)大量の画像を扱う際には、今回のノートブックの入出力にGCSを使うのはお勧めできないことがわかりました。
まとめ
Google Colabを用いたNDLOCRの実行時間を調べてみました。さまざまな設定によって結果は変わってくるかと思いますが、参考になる部分があれば幸いです。