はじめに
アノテーションの方法として、oxを判定する比較的簡単なデータ分析はグーグルスプレッドシートで対応していました。
しかし、最近系列ラベリングなどのアノテーションが必要になり、グーグルスプレッドシートでは厳しくなってきたので、何かしらのアノテーションツールを導入することにしました。
要件としては以下のとおりです。
- OSによらず(特にWindowsは必須)、極力複雑な手順を含めずに、かつ複数ユーザーからアクセス可能にする
- サーバーはGCPのVMを使い、データはサーバ上で管理する(クライアントにデータを置かない)
今回は利用経験があるということもあり、bratを使うことにしました。
ただ、bratサーバを立てる記事は少なめ(ローカルでとりあえず使うというのは結構ある)なので、「VM作成〜クライアントからbratへアクセスしてexampleにタグ付け」までの流れを忘備録としてまとめることにしました。
手順
0. 前準備: gcloudをインストールする
GCPのVMへ接続する上で、クライアントPCにgcloud
をインストールしておくと、色々はかどります。
以下のクイックスタートからOSに応じたgcloudをインストールしておきましょう。
1. GCPでbratを導入するVMを作成する
まずbratをインストールするサーバーを作ります。今回はGCP computer engingのVMを使います。
ポイントは以下のとおりです。
- スペックは軽めで問題ない(アノテーション対象のデータが乗る程度のディスク容量は確保しておく)
- bratサーバーへHTTPでアクセスできるようにするためのファイアウォールの設定が必要
- セキュリティを高めるために外部IPは付与しない(エフェメラルIPもなし)
今回は、例として以下のようなサーバーを作成しました
- OS: Ubuntu 20.04
- スペック: 適当(ディスクは一応20G用意)
- サーバー名: brat-server
- project名: test
- zone名: asia-east1-a
- 外部IP: なし
- ファイアウォール: tcp:8888を開ける(ポートは他と重複しなければ自由。接続元IPアドレスの範囲は適宜調整)
- サービスアカウント: アクセス予定のユーザーを詰め込んだものを設定しておく
2. dockerをインストールする
今回はbratのdockerコンテナを利用するため、先にdockerをインストールします。
といっても、brat用に特別な対応は必要なく、普通にdockerをインストールすればよいだけです。
記述する必要性も薄いですが、一応手順を掲載しておきます
# gcloud ssh を使って(1)で作成したサーバーへ接続(ブラウザからのアクセスでも問題ない)
gcloud compute ssh --project "test" --zone "asia-east1-a" brat-server
# とりあえずupdate
sudo apt update
# インストールに必要なアプリケーションをインストール
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
# 承認用のキーを取得・確認し、dockerのリポジトリ情報をインストール
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# dockerのインストールとテスト
sudo apt update
sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo docker run --rm run-test
sudo docker rmi run-test #イメージの削除
3. bratをインストールする
brat用のdockerコンテナを作成している方がいますので、それをそのまま利用します。
今回はコメントなどを日本語化しているroy29fuku様のコンテナを使いました。
bratコンテナとそのデプロイ方法は、コンテナ作成者の以下のサイトを参考にさせていただきました(というかほぼそのまま)。
# docker volumeの作成と確認(brat関係のデータ置き場になります)
sudo docker volume create --name brat-data
sudo docker volume create --name brat-cfg
sudo docker volume ls
# bratコンテナDL〜起動まで
git clone https://github.com/roy29fuku/brat-docker.git
cd brat-docker/
### 注意: Dockerfileの書き換えが必要 ###
# `FROM ubuntu` 以降の近いところに `ENV DEBIAN_FRONTEND=noninteractive` を追加
# build
sudo docker build . -t roy29fuku/brat
# 確認
sudo docker images
# docker コンテナの初回起動
sudo docker run --name=brat-dev -d -p 8888:80 -v brat-data:/bratdata -v brat-cfg:/bratcfg -e BRAT_USERNAME=brat -e BRAT_PASSWORD=brat -e BRAT_EMAIL=hogehoge@xxx.com roy29fuku/brat
注意点としては、ubuntu18以降の環境だとdocker build
がうまく通らないことです(タイムゾーン選択で詰まる)。
対処方法として、DockerfileにENV DEBIAN_FRONTEND=noninteractive
を書き加えることで解決できます。
原因については以下の記事を参照してください。
4. クライアントからブラウザ上でbratサーバーにアクセスする。
gcloud ssh でローカルフォワーディングし、ブラウザから設定したポートへアクセスすることで比較的安全にbratサーバーへアクセスできます(設定したprojectおよびサービス アカウントに関するGoogleの認証が必要になります)。
# ポートフォワーディング(ローカルのポートは他のポートと被らないなら何でも良い)
gcloud compute ssh --project "test" --zone "asia-east1-a" brat-server -- -N -L 2222:localhost:8888
# Chromeなどのブラウザ上で localhost:2222 にアクセス(bratサーバーにつながる)
↓
# 右上のbratのアイコンからログインする(ユーザー名とパスワードは(3)で設定したもの)
↓
# example のデータでタグ付けができればOK
5. その他
本記事ではbrat自体の設定については省略します。以下のページが参考になると思います。
おわりに
今回はGCPのVMにUbuntuサーバーを作成し、bratをdockerインストールして、ローカル環境からexampleをアノテーションするところまでを解説しました。
やっぱりアノテーション専用のツールを使うと作業が快適になりました。皆様もぜひ導入してみてはいかがでしょうか?