オープンLLMを使用したセキュアな翻訳サイトをオンプレ環境で立ててみた

## 概要

セキュアな翻訳を実現するオープンLLMを利用したアプリケーションをローカルPCで動作させる方法を記載します。

この翻訳アプリケーションは、フリーユース・商用利用可能なオープンLLM（大規模言語モデル）を使用しており、データの安全性を最優先に考えた設計となっています。
以下の特徴を持つことで、安心してご利用いただける環境を提供いたします。

主な特徴：
- セキュリティ重視：クローズドな環境(オフラインまたはLAN内)で動作し、外部へのデータ流出のリスクを最小限に抑えています。
- 高精度な翻訳：業界最先端の言語モデルを搭載し、専門的な内容でも高い精度で翻訳可能です。
- ユーザーデータ保護：個人情報や機密データを扱う業務でも安心してご利用いただけます。

現在、機密性の高い情報を翻訳する際に抱えている課題を解決するため開発されたこのアプリケーションは、特にセキュリティを重視する業務に最適です。


## 前提
- dockerを扱えること

事情でWindowsPCを共用されているのでWSL2上で動作させています。
外部からのアクセスは適宜ファイアウォールの設定からポート開放してください。


### 推奨
- 推奨16GB以上のメモリ。現状32GBメモリ
- SSD推奨(モデルのロード時間が短くなる。応答速度は変わりないらしい。[^1])
- docker上でGPUが扱えること[^2]


[^1]: [LLaMA and Llama-2 Hardware Requirements for Local Use (GPU, CPU, RAM)](https://www.hardware-corner.net/guides/computer-to-run-llama-ai-model/)
[^2]: [ollama (llama3) + docker + wsl2 + ubuntu24メモ](https://qiita.com/kiyotaman/items/cf405a654cee1f21641f#wsl%E3%81%ABubuntu%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)

### ollamaをdockerで動作させる
`$ docker run -it ollama/ollama`

### open-webuiをdockerで動作させる
`$ docker run -it ghcr.io/open-webui/open-webui:cuda`

実際はdocker-composeを使いました。

<details><summary>docker-compose.yml</summary>
    
```yaml:docker-compose.yml
    ollama:
        image: "ollama/ollama"
        # image: "u1and0/ollama"
        deploy:
            resources:
                reservations:
                    devices:
                        - driver: nvidia
                          count: all
                          capabilities: ["gpu"]
        ports:
            - "11434:11434"
        volumes:
          - "ollama:/root/.ollama"
        restart: "unless-stopped"

    webui:
        image: "ghcr.io/open-webui/open-webui:cuda"
        deploy:
            resources:
                reservations:
                    devices:
                        - driver: nvidia
                          count: all
                          capabilities: ["gpu"]
        ports:
            - "13000:8080"
        extra_hosts:
          - "host.docker.internal:host-gateway"
        volumes:
          - "open-webui:/app/backend/data"
        restart: "unless-stopped"
```

</details>



## 作業内容
コンテナ外部から`ollama`コマンドを実行する形式で書きます。
コンテナ内に入って作業する場合は`$ docker compose exec`の部分を無視して、直接`ollama`コマンドを打ってください。

### 基となるモデルをダウンロードする
今回はMeta社の[llama3.1](https://ollama.com/library/llama3.1)を選択しました。

`$ docker compose exec ollama ollama pull llama3.1`


<details><summary>その他試したもの</summary>

- 7shi/tanuki-dpo-v1.0:8b-q6_K : 日本発のLLM. 翻訳の他に余計な情報を付け足す傾向が強かった。
- llama3.1:70b-instruct-q2_K : llama3.1のパラメータ増強版。メモリの制約から2ビット量子化モデルを選択したが、やはりメモリに乗らずに動作しなかった。現状32GBを借りているところ、64GBまで増加すれば動作できるかもしれない。
</details>

### Modelfileを抽出する
モデルのプロンプトをカレントディレクトリの`Modelfile`へ出力するコマンド[^3]。

`$ docker compose exec ollama  ollama show --modelfile llama3.1 > Modelfile`


[^3]: [Any way to download a Modelfile metadata from ollama library?](https://www.reddit.com/r/ollama/comments/1bz67q2/any_way_to_download_a_modelfile_metadata_from/)

### システムプロンプトの変更

出力されたModelfileに以下を追加します[^4]。
プロンプトは [日英を相互翻訳するプロンプト文](https://qiita.com/oichan00/items/fbc2dd37b4d960c4b8c4#3-%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E6%96%87) を参考に作成しました。

[^4]: [Ollamaを使ってLlama3をカスタマイズしてみた(初心者向け解説)｜AI-Bridge Lab こば](https://note.com/doerstokyo_kb/n/n27092ccc720c)

```Dockerfile:Modelfile
# SYSTEM PROMPT をカスタムする
SYSTEM """


system

指示：
- 英語が入力された場合、日本語で出力してください。
- 出力は自然な母国語の話者のように表現してください。
- 出力形式は入力形式を忠実に再現してください。
- 冗長な表現や不適切な言い回しは適切に修正してください。
- JTF日本語標準スタイルガイドに従い、文法的に正しい自然な文章にし、句読点を適切に追加してください。
- 不明な言葉があれば質問してください。
- (最重要要件)出力をそのままコピーペーストするので不要な情報は含めず、結果の出力のみ行ってください。

入力文：
（次のチャットでお伝えします。待機してお待ち下さい）


"""
```


<details><summary>Modelfile全文</summary>

```Dockerfile:Modelfile
# Modelfile generated by "ollama show"
# To build a new Modelfile based on this, replace FROM with:
# FROM llama3.1:latest

FROM /root/.ollama/models/blobs/sha256-8eeb52dfb3bb9aefdf9d1ef24b3bdbcfbe82238798c4b918278320b6fcef18fe
TEMPLATE """{{- if or .System .Tools }}
system

{{- if .System }}

{{ .System }}
{{- end }}
{{- if .Tools }}

Cutting Knowledge Date: December 2023

When you receive a tool call response, use the output to format an answer to the orginal user question.

You are a helpful assistant with tool calling capabilities.
{{- end }}

{{- end }}
{{- range $i, $_ := .Messages }}
{{- $last := eq (len (slice $.Messages $i)) 1 }}
{{- if eq .Role "user" }}
user

{{- if and $.Tools $last }}

Given the following functions, please respond with a JSON for a function call with its proper arguments that best answers the given prompt.

Respond in the format {"name": function name, "parameters": dictionary of argument name and its value}. Do not use variables.

{{ range $.Tools }}
{{- . }}
{{ end }}
Question: {{ .Content }}

{{- else }}

{{ .Content }}

{{- end }}{{ if $last }}
assistant


{{ end }}
{{- else if eq .Role "assistant" }}
assistant

{{- if .ToolCalls }}
{{ range .ToolCalls }}
{"name": "{{ .Function.Name }}", "parameters": {{ .Function.Arguments }}}{{ end }}
{{- else }}

{{ .Content }}
{{- end }}{{ if not $last }}
{{ end }}
{{- else if eq .Role "tool" }}
ipython


{{ .Content }}
{{ if $last }}
assistant


{{ end }}
{{- end }}
{{- end }}"""

# SYSTEM PROMPT をカスタムする
SYSTEM """


system

指示：
- 英語が入力された場合、日本語で出力してください。
- 出力は自然な母国語の話者のように表現してください。
- 出力形式は入力形式を忠実に再現してください。
- 冗長な表現や不適切な言い回しは適切に修正してください。
- JTF日本語標準スタイルガイドに従い、文法的に正しい自然な文章にし、句読点を適切に追加してください。
- 不明な言葉があれば質問してください。
- (最重要要件)出力をそのままコピーペーストするので不要な情報は含めず、結果の出力のみ行ってください。

入力文：
（次のチャットでお伝えします。待機してお待ち下さい）


"""

PARAMETER stop 

PARAMETER stop 

PARAMETER stop 

LICENSE "LLAMA 3.1 COMMUNITY LICENSE AGREEMENT
Llama 3.1 Version Release Date: July 23, 2024

“Agreement” means the terms and conditions for use, reproduction, distribution and modification of the
Llama Materials set forth herein.

“Documentation” means the specifications, manuals and documentation accompanying Llama 3.1
distributed by Meta at https://llama.meta.com/doc/overview.

“Licensee” or “you” means you, or your employer or any other person or entity (if you are entering into
this Agreement on such person or entity’s behalf), of the age required under applicable laws, rules or
regulations to provide legal consent and that has legal authority to bind your employer or such other
person or entity if you are entering in this Agreement on their behalf.

“Llama 3.1” means the foundational large language models and software and algorithms, including
machine-learning model code, trained model weights, inference-enabling code, training-enabling code,
fine-tuning enabling code and other elements of the foregoing distributed by Meta at
https://llama.meta.com/llama-downloads.

“Llama Materials” means, collectively, Meta’s proprietary Llama 3.1 and Documentation (and any
portion thereof) made available under this Agreement.

“Meta” or “we” means Meta Platforms Ireland Limited (if you are located in or, if you are an entity, your
principal place of business is in the EEA or Switzerland) and Meta Platforms, Inc. (if you are located
outside of the EEA or Switzerland).

By clicking “I Accept” below or by using or distributing any portion or element of the Llama Materials,
you agree to be bound by this Agreement.

1. License Rights and Redistribution.

  a. Grant of Rights. You are granted a non-exclusive, worldwide, non-transferable and royalty-free
limited license under Meta’s intellectual property or other rights owned by Meta embodied in the Llama
Materials to use, reproduce, distribute, copy, create derivative works of, and make modifications to the
Llama Materials.

  b. Redistribution and Use.

      i. If you distribute or make available the Llama Materials (or any derivative works
thereof), or a product or service (including another AI model) that contains any of them, you shall (A)
provide a copy of this Agreement with any such Llama Materials; and (B) prominently display “Built with
Llama” on a related website, user interface, blogpost, about page, or product documentation. If you use
the Llama Materials or any outputs or results of the Llama Materials to create, train, fine tune, or
otherwise improve an AI model, which is distributed or made available, you shall also include “Llama” at
the beginning of any such AI model name.

      ii. If you receive Llama Materials, or any derivative works thereof, from a Licensee as part 
of an integrated end user product, then Section 2 of this Agreement will not apply to you.

      iii. You must retain in all copies of the Llama Materials that you distribute the following
attribution notice within a “Notice” text file distributed as a part of such copies: “Llama 3.1 is
licensed under the Llama 3.1 Community License, Copyright © Meta Platforms, Inc. All Rights
Reserved.”

      iv. Your use of the Llama Materials must comply with applicable laws and regulations
(including trade compliance laws and regulations) and adhere to the Acceptable Use Policy for the Llama
Materials (available at https://llama.meta.com/llama3_1/use-policy), which is hereby incorporated by
reference into this Agreement.

2. Additional Commercial Terms. If, on the Llama 3.1 version release date, the monthly active users
of the products or services made available by or for Licensee, or Licensee’s affiliates, is greater than 700
million monthly active users in the preceding calendar month, you must request a license from Meta,
which Meta may grant to you in its sole discretion, and you are not authorized to exercise any of the
rights under this Agreement unless or until Meta otherwise expressly grants you such rights.

3. Disclaimer of Warranty. UNLESS REQUIRED BY APPLICABLE LAW, THE LLAMA MATERIALS AND ANY
OUTPUT AND RESULTS THEREFROM ARE PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OF
ANY KIND, AND META DISCLAIMS ALL WARRANTIES OF ANY KIND, BOTH EXPRESS AND IMPLIED,
INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OF TITLE, NON-INFRINGEMENT,
MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. YOU ARE SOLELY RESPONSIBLE FOR
DETERMINING THE APPROPRIATENESS OF USING OR REDISTRIBUTING THE LLAMA MATERIALS AND
ASSUME ANY RISKS ASSOCIATED WITH YOUR USE OF THE LLAMA MATERIALS AND ANY OUTPUT AND
RESULTS.

4. Limitation of Liability. IN NO EVENT WILL META OR ITS AFFILIATES BE LIABLE UNDER ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, TORT, NEGLIGENCE, PRODUCTS LIABILITY, OR OTHERWISE, ARISING
OUT OF THIS AGREEMENT, FOR ANY LOST PROFITS OR ANY INDIRECT, SPECIAL, CONSEQUENTIAL,
INCIDENTAL, EXEMPLARY OR PUNITIVE DAMAGES, EVEN IF META OR ITS AFFILIATES HAVE BEEN ADVISED
OF THE POSSIBILITY OF ANY OF THE FOREGOING.

5. Intellectual Property.

  a. No trademark licenses are granted under this Agreement, and in connection with the Llama
Materials, neither Meta nor Licensee may use any name or mark owned by or associated with the other
or any of its affiliates, except as required for reasonable and customary use in describing and
redistributing the Llama Materials or as set forth in this Section 5(a). Meta hereby grants you a license to
use “Llama” (the “Mark”) solely as required to comply with the last sentence of Section 1.b.i. You will
comply with Meta’s brand guidelines (currently accessible at
https://about.meta.com/brand/resources/meta/company-brand/ ). All goodwill arising out of your use
of the Mark will inure to the benefit of Meta.

  b. Subject to Meta’s ownership of Llama Materials and derivatives made by or for Meta, with
respect to any derivative works and modifications of the Llama Materials that are made by you, as
between you and Meta, you are and will be the owner of such derivative works and modifications.

  c. If you institute litigation or other proceedings against Meta or any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Llama Materials or Llama 3.1 outputs or
results, or any portion of any of the foregoing, constitutes infringement of intellectual property or other
rights owned or licensable by you, then any licenses granted to you under this Agreement shall
terminate as of the date such litigation or claim is filed or instituted. You will indemnify and hold
harmless Meta from and against any claim by any third party arising out of or related to your use or
distribution of the Llama Materials.

6. Term and Termination. The term of this Agreement will commence upon your acceptance of this
Agreement or access to the Llama Materials and will continue in full force and effect until terminated in
accordance with the terms and conditions herein. Meta may terminate this Agreement if you are in
breach of any term or condition of this Agreement. Upon termination of this Agreement, you shall delete
and cease use of the Llama Materials. Sections 3, 4 and 7 shall survive the termination of this
Agreement.

7. Governing Law and Jurisdiction. This Agreement will be governed and construed under the laws of
the State of California without regard to choice of law principles, and the UN Convention on Contracts
for the International Sale of Goods does not apply to this Agreement. The courts of California shall have
exclusive jurisdiction of any dispute arising out of this Agreement.

# Llama 3.1 Acceptable Use Policy

Meta is committed to promoting safe and fair use of its tools and features, including Llama 3.1. If you
access or use Llama 3.1, you agree to this Acceptable Use Policy (“Policy”). The most recent copy of
this policy can be found at [https://llama.meta.com/llama3_1/use-policy](https://llama.meta.com/llama3_1/use-policy)

## Prohibited Uses

We want everyone to use Llama 3.1 safely and responsibly. You agree you will not use, or allow
others to use, Llama 3.1 to:

1. Violate the law or others’ rights, including to:
    1. Engage in, promote, generate, contribute to, encourage, plan, incite, or further illegal or unlawful activity or content, such as:
        1. Violence or terrorism
        2. Exploitation or harm to children, including the solicitation, creation, acquisition, or dissemination of child exploitative content or failure to report Child Sexual Abuse Material
        3. Human trafficking, exploitation, and sexual violence
        4. The illegal distribution of information or materials to minors, including obscene materials, or failure to employ legally required age-gating in connection with such information or materials.
        5. Sexual solicitation
        6. Any other criminal activity
    3. Engage in, promote, incite, or facilitate the harassment, abuse, threatening, or bullying of individuals or groups of individuals
    4. Engage in, promote, incite, or facilitate discrimination or other unlawful or harmful conduct in the provision of employment, employment benefits, credit, housing, other economic benefits, or other essential goods and services
    5. Engage in the unauthorized or unlicensed practice of any profession including, but not limited to, financial, legal, medical/health, or related professional practices
    6. Collect, process, disclose, generate, or infer health, demographic, or other sensitive personal or private information about individuals without rights and consents required by applicable laws
    7. Engage in or facilitate any action or generate any content that infringes, misappropriates, or otherwise violates any third-party rights, including the outputs or results of any products or services using the Llama Materials
    8. Create, generate, or facilitate the creation of malicious code, malware, computer viruses or do anything else that could disable, overburden, interfere with or impair the proper working, integrity, operation or appearance of a website or computer system

2. Engage in, promote, incite, facilitate, or assist in the planning or development of activities that present a risk of death or bodily harm to individuals, including use of Llama 3.1 related to the following:
    1. Military, warfare, nuclear industries or applications, espionage, use for materials or activities that are subject to the International Traffic Arms Regulations (ITAR) maintained by the United States Department of State
    2. Guns and illegal weapons (including weapon development)
    3. Illegal drugs and regulated/controlled substances
    4. Operation of critical infrastructure, transportation technologies, or heavy machinery
    5. Self-harm or harm to others, including suicide, cutting, and eating disorders
    6. Any content intended to incite or promote violence, abuse, or any infliction of bodily harm to an individual

3. Intentionally deceive or mislead others, including use of Llama 3.1 related to the following:
    1. Generating, promoting, or furthering fraud or the creation or promotion of disinformation
    2. Generating, promoting, or furthering defamatory content, including the creation of defamatory statements, images, or other content
    3. Generating, promoting, or further distributing spam
    4. Impersonating another individual without consent, authorization, or legal right
    5. Representing that the use of Llama 3.1 or outputs are human-generated
    6. Generating or facilitating false online engagement, including fake reviews and other means of fake online engagement

4. Fail to appropriately disclose to end users any known dangers of your AI system

Please report any violation of this Policy, software “bug,” or other problems that could lead to a violation
of this Policy through one of the following means:

* Reporting issues with the model: [https://github.com/meta-llama/llama-models/issues](https://github.com/meta-llama/llama-models/issues)
* Reporting risky content generated by the model: developers.facebook.com/llama_output_feedback
* Reporting bugs and security concerns: facebook.com/whitehat/info
* Reporting violations of the Acceptable Use Policy or unlicensed uses of Llama 3.1: LlamaUseReport@meta.com"
```

</details>


### カスタムモデルファイルをollamaコンテナへコピー
Modelfileを置くディレクトリをコンテナ内へ作成

`$ docker compose exec ollama mkdir /root/.ollama/Translator`

コンテナへコピー

`$ docker compose cp ./Translator/Modelfile ollama:/root/.ollama/Translator/Modelfile`

### カスタムモデルの作成
`translator:llama3.1`というモデル名でollamaコンテナにモデルを作成しました。
`-f`オプションで先ほど作成したModelfileを参照させます。

`$ docker compose exec ollama ollama create translator:llama3.1 -f /root/.ollama/Translator/Modelfile`


### カスタムモデルの実行
#### Open WebUIを使ってブラウザから会話する場合
Open WebUI と Ollamaのコンテナが立ち上がっている場合はhttp://localhost:8080 等へアクセスしたり、ページをF5等で更新すると、モデル選択の部分に`translator:llama3.1`が表示されます。
`translator:llama3.1`を選択した状態で、プロンプトに英文を打ち込むと日本語に訳してくれます。

これで、直接英文を打ち込むと日本語に翻訳してくれるクローズドな翻訳機ができました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113494/9f8cf32d-21e1-f0e2-cddd-12f3e0329d30.png)

#### ollamaコマンドでターミナルから会話する場合

`$ docker compose exec ollama ollama run translator:llama3.1`



## 翻訳事例
実際にtranslator:llama3.1が翻訳した文章を見てみましょう。
原文(英語)→日本語訳(日本語)　の順に表示します。

### LLAMA 3.1 LICENSE
https://llama.meta.com/llama3_1/license/

#### 原文

LICENSE "LLAMA 3.1 COMMUNITY LICENSE AGREEMENT
Llama 3.1 Version Release Date: July 23, 2024

“Agreement” means the terms and conditions for use, reproduction, distribution and modification of the
Llama Materials set forth herein.

“Documentation” means the specifications, manuals and documentation accompanying Llama 3.1
distributed by Meta at https://llama.meta.com/doc/overview.

“Licensee” or “you” means you, or your employer or any other person or entity (if you are entering into
this Agreement on such person or entity’s behalf), of the age required under applicable laws, rules or
regulations to provide legal consent and that has legal authority to bind your employer or such other
person or entity if you are entering in this Agreement on their behalf.

“Llama 3.1” means the foundational large language models and software and algorithms, including
machine-learning model code, trained model weights, inference-enabling code, training-enabling code,
fine-tuning enabling code and other elements of the foregoing distributed by Meta at
https://llama.meta.com/llama-downloads.

“Llama Materials” means, collectively, Meta’s proprietary Llama 3.1 and Documentation (and any
portion thereof) made available under this Agreement.

“Meta” or “we” means Meta Platforms Ireland Limited (if you are located in or, if you are an entity, your
principal place of business is in the EEA or Switzerland) and Meta Platforms, Inc. (if you are located
outside of the EEA or Switzerland).

By clicking “I Accept” below or by using or distributing any portion or element of the Llama Materials,
you agree to be bound by this Agreement.


#### 日本語訳
「LLAMA 3.1 コミュニティライセンス契約」

本契約は、2024 年 7 月 23 日に発行された LLAMA 3.1 のバージョンです。

「規約」は、LLAMA の材料の使用、複製、配布、および修正に関する条件を示します。

「ドキュメント」は、https://llama.meta.com/doc/overview で公開されている Llama 3.1 に付属している仕様書・マニュアル・ドキュメントを指します。

「ライセンシー」とは、「規約」に署名する場合、その人または団体が年齢制限がない法的同意の権利を持つ且つ、それらの団体または人が同意できる立場にあることを条件として、

「LLAMA 3.1」とは、メタによってhttps://llama.meta.com/llama-downloadsで配布されている大規模言語モデルの基礎となるソフトウェアとアルゴリズム、機械学習モデル コード、訓練済みモデルの重み、および推論を有効にするコーディネート、トレーニングを有効にするコード、フィーネチュアリングを有効にするコードおよびこれらを含む他のすべての要素を指します。

「LLAMA の材料」とは、本規約に基づくメタのプライベートな LLAMA 3.1 およびドキュメント（またはそれらの部分）であり、本規約で許可された使用方法です。

「メタ」や「私たち」とは、EEA またはスイス内に住所がある場合のMeta Platforms Ireland Limitedと、EEAまたはスイス外に住所がある場合は、Meta Platforms, Inc.を指します。

ここで、「私は合意する」というボタンをクリックしたり、

LLAMA の材料のどれか一つもしくはその要素を使用したり配布したりすると、

あなたはこの規約の全ての条項に同意することになります。


### TC74HC74AP,TC74HC74AF 
https://datasheet.octopart.com/TC74HC74AF%28F%29-Toshiba-datasheet-13719681.pdf

#### 原文
The TC74HC74A is a high speed CMOS D FLIP FLOP 
fabricated with silicon gate C2MOS technology. 
It achieves the high speed operation similar to equivalent 
LSTTL while maintaining the CMOS low power dissipation. 
The signal level applied to the D INPUT is transferred to Q 
OUTPUT during the positive going transition of the CLOCK 
pulse. 
CLEAR and PRESET are independent of the CLOCK and 
are accomplished by setting the appropriate input to an “L” level. 
All inputs are equipped with protection circuits against static 
discharge or transient excess voltage

#### 日本語訳
TC74HC74Aは、シリコングレートC2モス技術によって作られた高速度のCMOS D FLIP FLOPです。
これは同等のLSTTLと同じ高速度の動作を実現しながら、CMOS低電力消費を維持します。
入力信号であるDインプットに適用された信号はクロックパルスの正向きの転位でQ出力を伝達します。
クリアーとプリセットはクロックとは独立しており、適切な入力をLレベルに設定することで実行されます。
すべての入力には静電放電や瞬間的過剰電圧に対抗して保護回路が備わっています。

### CNN News
https://edition.cnn.com/2024/09/11/europe/russia-iran-ballistic-missiles-satellite-intl/index.html

#### 原文
A Russian cargo ship suspected of carrying Iranian ballistic missiles for Moscow’s war against Ukraine was seen at a Russian port on the Caspian Sea a week ago, satellite imagery shared with CNN shows.

The vessel – the Port Olya 3 – was identified by Maxar Technologies in satellite imagery taken on September 4 at Port Olya in Astrakhan. The ship had previously been in the Iranian port of Amirabad on August 29, according to ship tracking data. It turned off its transponder at some point after.

The US Treasury department assessed Tuesday that the Russian Ministry of Defense had “used the vessel Port Olya-3 to transport CRBMs from Iran to Russia.”

“As of early September 2024, Russia received the first shipment of CBRMs (close-range ballistic missiles) from Iran,” the Treasury said, as it announced sanctions on the Port Olya 3 along with other vessels and several Iranian individuals.


#### 日本語訳
CNNに提供された衛星画像によると、ウクライナに対するモスクワの戦争に使用されるために入手したと疑われるイラン製弾道ミサイルを運んでいたロシアの貨物船がカスピ海岸にあるロシア港で1週間前に見えていたことがわかりました。

画像は、9月4日にアストラハン州オリャ地区にあるPort Olyaでの衛星写真です。Maxarテクノロジーによると、この船舶（Port Olya 3）は、8月29日にイランのAmirabadで停泊していたとされました。それ以前はそのGPSトランプオンデバイスを消したことがわかっています。

アメリカ合衆国の財務省によると、「9月初頭にはロシア防衛省がこの船舶Port Olya 3を通じてイランからCRBMs（近距離弾道ミサイル）を輸入していた」と評価しています。

「2024年9月の初めごろまでに、ロシアはウクライナに対するCRBMsの最初の割当を取得した」と財務省は言いました。そしてPort Olya 3、他にも船舶といくつかのイラン人について制裁を発表しました。


## まとめ
llama2 のときにも試したことがありましたが、そのときはほぼ使い物にならない性能でした。
今回、llama3.1にモデルをアップグレードしたことで、翻訳機として遜色ないレベルにまで翻訳性能が上がったように思います。
セットアップのdocker(docker-compose)さえ使えれば済むので、非常にハードルが低く、ながら作業で2日、リサーチから含めて作業時間5時間ほどでこの記事を書けました。
Google翻訳やDeepLを使うと、翻訳した情報はGoogleやDeepLのサーバーへ送信されてしまいます。企業のセキュアな作業にはこのようなアプリケーションをオンプレで立てて活躍する機会があるかもしれません。