🗂

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 から、 <>CODEDownload 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 サービスとして公開する必要がなければ、argostranslateargostranslategui パッケージを 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.

最近、あまりメンテナンスされてなさそうなのが気になるけど… 😓

脚注
  1. Gunicorn - Python WSGI HTTP Server for UNIX ↩︎

  2. The web framework for perfectionists with deadlines | Django ↩︎

  3. 静的ファイル (画像、JavaScript、CSS など) を管理する | Django documentation | Django ↩︎

  4. Welcome to Flask — Flask Documentation (3.1.x) ↩︎

  5. Qt | ソフトウェア開発ライフサイクルの各ステージに対応するフレームワーク ↩︎

GitHubで編集を提案

Discussion