LibreTranslate でクローズド環境に翻訳サービスを構築する話
LibreTranslate - 無料かつオープンソースな機械翻訳APIをクローズド環境に構築する手順をメモします。
試した環境
RedHat Linux 9.4、AlmaLinux 9.5 で試しました。Pythonは、3.9 系と 3.10 系です。
インターネットに接続されている端末での準備
予めクローズド環境でホストする OS と同様の環境をインターネットに繋がる端末に構築しておきます。
Python venv 環境の準備
必要により、Python venv 環境を構築し、システムワイドにパッケージをインストールしないようにします。
$ python -m venv libretranslate
コマンドが成功すると libretranslate
というディレクトリが作成されます。
次のコマンドで作成した venv 環境を有効にします。
[username@hostname ~]$ source libretranslate/bin/activate
(libretranslate) [username@hostname ~]$
プロンプトの冒頭に (libretranslate)
のように venv 環境名が出力されます。
パッケージの取得
以下のコマンドで libretranslate とその依存パッケージを packages
というディレクトリにダウンロードします。合計で 5G を超えるファイルがダウンロードされるので時間がかかります。
$ pip download -d packages libretranslate
ollecting libretranslate
Downloading libretranslate-1.6.5-py3-none-any.whl (1.0 MB)
|████████████████████████████████| 1.0 MB 561 kB/s
Collecting argos-translate-files==1.2.0
Downloading argos_translate_files-1.2.0-py3-none-any.whl (10 kB)
(以下略)
ディレクトリごと、USBメモリー等でクローズド環境にコピーします。
LibraTranslate のインストール
言語モデルを取得するために LibraTranslate をインストールします。
$ pip install --no-index --find-links=packages libretranslate
Looking in links: packages
Processing ./packages/libretranslate-1.6.5-py3-none-any.whl
Processing ./packages/APScheduler-3.9.1-py2.py3-none-any.whl
(以下略)
最後に Successfully installed
で始まるメッセージが出力されれば成功です。
言語モデルの取得
libretranslate
を --update-models
パラメーター付きで起動します。
$ libretranslate --update-models
Updating language models
Found 94 models
Downloading Albanian → English (1.9) ...
(以下略)
実行したユーザーのホームディレクトリにある ~/.local/share/argos-translate
というディレクトリ以下に言語モデルがダウンロードされます。こちらも合計で 8G を超えるファイルをダウンロードするため、時間がかかります。
argos-translate
ディレクトリごと、USBメモリー等でクローズド環境にコピーします。
※ディレクトリ名は、内部で Argos Translateというニューラル機械翻訳ライブラリを利用していることに由来します。
なお、言語モデル取得後、サービスが起動し、http://127.0.0.1:5000
で待ち受けます。
Loaded support for 47 languages (94 models total)!
Running on http://127.0.0.1:5000
Ctrl
+C
で停止します。
クローズド環境での作業
Python venv 環境の準備
手順は、インターネットに接続されている端末での手順と同じです。
$ python -m venv libretranslate
$ source libretranslate/bin/activate
なお、パスが同じになるなら、venv で作成したディレクトリごと、インストールに接続されている端末から、コピーするとパッケージのインストール手順を省略できます。
パッケージのインストール
こちらも手順は、インターネットに接続されている端末での手順と同じです。当該端末から、コピーしてきた packages ディレクトリが配置されているディレクトリ(親ディレクトリ)で実行してください。
$ pip install --no-index --find-links=packages libretranslate
Looking in links: packages
Processing ./packages/libretranslate-1.6.5-py3-none-any.whl
Processing ./packages/APScheduler-3.9.1-py2.py3-none-any.whl
(以下略)
言語モデルの配置
インターネットに接続されている端末からコピーしてきた argos-translate
ディレクトリを~/.local/share/
というディレクトリにコピーします。
ファイアウォールの設定
LibreTranslate をインストールしたホスト以外からの接続を許可する場合は、ファイアウォールの設定を行ってください。RedHat系の場合、firewalld
が使われているので以下のコマンドで接続を許可します。
$ sudo firewall-cmd --add-port=5000/tcp --permanent
[sudo] username のパスワード:
success
$ sudo firewall-cmd --reload
success
許可するポートは、必要により、変更します。
サービスの起動
LibreTranslate をインストールしたホスト以外からの接続させる場合は、--host 0.0.0.0
付きで起動します。
$ libretranslate --host 0.0.0.0
Running on http://0.0.0.0:5000
これで http://IPアドレス:5000/
で外部からアクセスできるようになります。
ポート番号を変更する場合は、--port
オプションを使用します。
gunicorn で起動する場合
gunicorn[1] を libretranslate と同様の方法でダウンロード、インストールします。
$ pip download -d packages gunicorn
$ pip install --no-index --find-links=packages gunicorn
https://github.com/LibreTranslate/LibreTranslate から、 <>CODE
→Download ZIP
でダウンロードしたファイルを展開します。
$ unzip LibreTranslate-main.zip
展開されたディレクトリをカレントディレクトリに変更し、gunicorn を起動します。
$ cd LibreTranslate-main/
$ gunicorn --bind 0.0.0.0:5000 'wsgi:app'
公式ドキュメントにどこで実行するか、はっきり書いてなくて少し悩みました 😓
使用感
条件により、翻訳の精度がイマイチな場合があるが、それなりに使えそう。手直しは必要であろうが、PowerPoint などのファイルも翻訳ができるのは魅力的である。
I'll be back
が お問い合わせ
と翻訳されるのはいただけない😏
I will be back
なら、まあ…。
言語モデルを鍛えれば、いいんでしょうけど。
調査中の内容
gunicorn を通すとインターフェースが日本語化されない
まあ、使用に支障はないですけどね…。
Django[2] で static 以下を別で配信する必要がある[3]のと同じなのか、Flask[4] 特有の作法があるのか調査中。
おまけ
Web サービスとして公開する必要がなければ、argostranslate
や argostranslategui
パッケージを pip インストールするのも手です。
前者は argos-translate
というコマンド、後者は argos-translate-gui
で GUI を提供します。(ただし、Qt[5] が必要)
$ argos-translate -f ja -t en "トンネルを抜けるとそこは雪国だった。"
It was a snow country when I passed through the tunnel.
最近、あまりメンテナンスされてなさそうなのが気になるけど… 😓
Discussion