機械学習エンジニアのためのLinux: はじめに
この記事は、シリーズ 機械学習エンジニアのためのLinux の第1回です。
はじめに
機械学習エンジニアとして働くなかで、私は Linux を頻繁に使っている。 学習・推論だけでなく、データセットの作成や結果の集計・分析など、いろいろなデータやファイルの処理にも Linux を活用してきた。
実際、Linux はこうした作業が得意な OS だ。 特にコマンドラインを使えば、大量のファイルを一度に編集したり、データどうしを紐づけたりするような複雑な作業もこなすことができる。
Linux で効率的なファイル処理をするには、いろいろなツールを使いこなす必要がある。
たとえば、ファイルの検索なら find
や locate
コマンド、画像の編集なら ImageMagick、といった具合だ。
だけど、これらのツールの機能や使い方をまとめて紹介してくれるチュートリアルは、あまり見かけない。
このシリーズの目的は、 Linux のコマンドラインを用いて、ファイルを効率的に処理する方法を学ぶことだ。 特に、Windows や Mac の操作には慣れているが、Linux をあまり使ったことがない人、 あるいは Linux の知識を復習したい人を対象に、様々なツールの実践的な使い方を紹介しようと思う。
なんで、コマンドラインなの?
Windows や Mac と比べた Linux の大きな特徴は、コマンドラインを多用する、というところだ。
PC を操作するときに、この図のような文字ばかりの画面を使っている場面を見たことがあると思う。
この黒い画面は コマンドライン や CLI (コマンドライン・インタフェース)とよばれ、 キーボードだけでコンピュータを操作できるという特徴がある。 ウィンドウやメニューをもつ GUI (グラフィカル・ユーザ・インタフェース) に比べるととっつきにくいけど、慣れればとても効率的に作業できるようになる。
また、コマンドラインを使うことで、サーバにアクセスして操作することも簡単になる。 機械学習の現場では、高性能なサーバやクラウド上など、リモート(遠隔)での作業が必要になることが多い。 コマンドラインを使いこなせば、どこからでも簡単にサーバに接続して作業ができるようになる。
コマンドラインで、何ができるの?
「コマンドライン操作は効率的だ」と言われても、GUI に慣れている人はこう思うかもしれない。
Windows/ Mac に比べてグラフィックスはしょぼいし、コマンドラインで大したことはできないんじゃない?
そんなことはない。Linux のコマンドラインは、GUI に負けない多彩なツールを備えている。 Linux コマンドラインでできることのうち、ほんの一部を紹介しよう。
- ファイルの移動・コピー、検索
- インターネット上からのファイルのダウンロード
- Web ブラウザ を使ったネットサーフィン
- メールの送受信や管理
- 高性能なテキストエディタを使ったテキスト編集、コーディング
- 画像、動画の編集
- 音楽の再生
- ディスクパーティション操作などの 高度な管理タスク
さらに、コマンドラインの大きなアドバンテージとして「ツールの組み合わせ」と「バッチ化」という2つの機能がある。 これは、次のように言い換えてもいい。
既存のツール(コマンド)を部品として、いろいろなプログラムが簡単に作れる
この特徴をよく示す例を、一つ挙げてみよう。
課題
機械学習用のデータセットを作成するとき、画像や音声を扱いやすいファイルサイズに縮小したい、という場合がある。 JPEG 画像を手頃な大きさ —— たとえば、縦・横がそれぞれ 256px —— にリサイズするには、どうすればよいか。
Windows や Mac の GUI では、OS 標準の画像編集ソフトや、市販の画像エディタなどを使ってリサイズすればいい。
Linux にもいろいろな画像編集ツールがあるけれど、ここでは mogrify
というコマンドを使うことにしよう。
具体的には、次のようなコマンドになる。
$ mogrify -resize '256x256!' 画像.JPG
では、次のような場合はどうだろう。
課題
インターネットから収集した数百万枚の画像を、なるだけ高速に全部リサイズしたい
GUI の場合、ふつうの画像編集ソフトには大量の画像を一気に編集する機能が備わっていない。 Adobe Photoshop のようなマクロ機能を備えた高性能ソフトを使うか、 プログラムを自作することになる。
でも、Linux のコマンドラインなら、この作業は難しくない。
さっきの mogrify
コマンドに、2つのコマンドをくっつければいい:
- ファイルを検索する
find
コマンドと、 - 検索結果に対して、画像編集ツール(
mogrify
)を並列実行するのに使うxargs
コマンドだ。
$ find . -iname '*.JPG' | xargs -P36 mogrify -resize '256x256!'
これで、フォルダ内の JPEG 画像を全部リサイズすることができる。
しかも、36個のプロセスで同時処理する(-P36
)というおまけ付きだから、
処理時間はかなり短くなるはずだ。
(実は、このコマンドが正しく動作するにはいくつか条件がある。詳しくは、後の章で解説することにしたい。)
さらに、いまのコマンドをテキストファイルとして保存すれば、 「ファイルの並列リサイズスクリプト」になる。
保存したテキストファイルの名前が thumb
だとしよう。
この場合、次のコマンドを実行すれば、最初のコマンドを打ち直さなくてもリサイズ処理ができる。
$ chmod u+x thumb
$ ./thumb
コマンドラインを使えば、このほかにも
- 「数千個の動画から、指定した区間の音声だけを切り出して保存する」
- 「システムの空き容量を、指定したメールアドレスに毎日送信する」
- 「インターネットから天気予報データを取得して、気象予報の画像をつくる」
など、いろいろなプログラムを既存のコマンドから手軽につくり出せる。
コマンドラインの可能性を引き出そう
どうだろう。Linux のコマンドラインに興味をもってもらえただろうか。
このシリーズでは、Linux コマンドラインの基本的な使い方から、機械学習エンジニアに役立つツールやテクニックまでを紹介していく。 また、機械学習に関連する例題も取り上げ、コマンドラインを活用した効率的なデータ処理方法を解説していく。
最初は難しく感じるかもしれないけれど、一歩ずつ進めば、コマンドラインの持つ強力な機能を活用できるようになるだろう。 慣れてくると、以前は GUI で行っていた作業もコマンドラインで素早く行えるようになり、作業効率が大幅に向上することに驚くかもしれない。
このシリーズを通して、Linux コマンドラインを使った作業が、機械学習エンジニアの日常業務をより効率的で快適なものに変えることを実感してもらえれば幸いだ。