> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 設定

> 本番環境で使用する ABBYY Vantage セルフホスト型の共有フォルダー、データベース接続、GPU サポート、処理タイムアウト、SSL/TLS 証明書を設定します。

<div id="setting-up-a-shared-folder-connection">
  ## 共有フォルダー接続の設定
</div>

ABBYY Vantage では、Vantage サーバーでホストされている共有フォルダーを使用して、ドキュメントや Skill のインポート/エクスポート、およびデータ カタログの更新を行えます。

共有フォルダー (NFS 共有) の利用を開始する前に、クライアント コンピューターからそれらの共有フォルダーへの接続を設定する必要があります。Windows を実行しているクライアント コンピューターで、次の手順を実行します。

1. Windows PowerShell を管理者として実行します。
2. Windows NFS クライアントをインストールします。

```powershell theme={null}
dism /online /Enable-Feature /FeatureName:ServicesForNFS-ClientOnly
dism /online /Enable-Feature /FeatureName:ClientForNFS-Infrastructure
```

3. 会社の方針に応じて、Windows ユーザーを Unix の UID および GID に対応付けます。

```powershell theme={null}
New-ItemProperty -Path "HKLM:\Software\Microsoft\ClientForNFS\CurrentVersion\Default" -Name "AnonymousGid" -Value 65532 -PropertyType DWord
New-ItemProperty -Path "HKLM:\Software\Microsoft\ClientForNFS\CurrentVersion\Default" -Name "AnonymousUid" -Value 65532 -PropertyType DWord
```

4. NFSクライアントを再起動します:

```powershell theme={null}
nfsadmin client stop
nfsadmin client start
```

上記の手順を完了すると、Vantageで共有フォルダーのパスをコピーして使用したり、ファイル エクスプローラーで開いたりできるようになります。

<div id="setting-up-a-database-connection">
  ## データベース接続の設定
</div>

ABBYY Vantage は外部サーバーでホストされているデータベースを使用しているため、それらのサーバーで障害が発生すると動作しなくなる場合があります。システム管理者は、そのようなデータベースを別のサーバーに復元し、Consul を使用して新しいデータベースへの接続を設定できます。

<Note>
  開始する前に、`kubectl` コマンドラインツールがインストールされており、Kubernetes クラスターへの接続が確立されていることを確認してください。
</Note>

ABBYY Vantage の設定で新しいデータベースへの接続を設定するには、次の手順を実行します。

1. 以下のコマンドを実行して、Consul の Web インターフェイスにアクセスします。

```bash theme={null}
kubectl port-forward -n abbyy-infrastructure service/consul-ui 8500:80
```

次に、`http://localhost:8500/ui/dc1/kv/secret/`にアクセスします。

2. 開いた **Key/Value** タブで、適切な Vantage 環境を選択します。
3. **platform** または **vantage** プロジェクトと、データベースを使用する該当のサービス (例: mail) を選択します。

<img src="https://mintlify.s3.us-west-1.amazonaws.com/abbyy/images/vantage/self-hosted/misc-p01-005.png" alt="利用可能なサービスを示す Consul の platform services 一覧" style={{ width:"53%" }} />

4. 各サービスに含まれる **database** セクションに移動します。

<img src="https://mintlify.s3.us-west-1.amazonaws.com/abbyy/images/vantage/self-hosted/misc-p01-006.png" alt="Vantage 環境の選択を示す Consul の Key/Value タブ" style={{ width:"58%" }} />

6. **SqlServer** セクションを開きます。

<img src="https://mintlify.s3.us-west-1.amazonaws.com/abbyy/images/vantage/self-hosted/misc-p01-007.png" alt="SqlServer の構成を示す Consul の database セクション" style={{ width:"58%" }} />

6. **connectionString** キーで、次の操作を行います。
   * **Server** の古い値を新しいサーバーのアドレスに置き換えます
   * **Database** パラメーターで新しいデータベースを指定します
   * **User Id** および **Password** パラメーターでログイン認証情報を指定します

<img src="https://mintlify.s3.us-west-1.amazonaws.com/abbyy/images/vantage/self-hosted/misc-p01-008.png" alt="Consul の connectionString 値エディター" style={{ width:"59%" }} />

7. **Save** をクリックします。
8. 次のコマンドを実行して、変更したサービスを再起動します。

```bash theme={null}
label=mail
kubectl -n abbyy-vantage rollout restart $(kubectl -n abbyy-vantage get deployments -l app.kubernetes.io/component=$label -o name)
```

<Note>
  サーバーアドレスが変更された場合は、この手順を各データベースに対して実行する必要があります。
</Note>

<div id="database-services-reference">
  ### データベースサービスのリファレンス
</div>

以下のテーブルに、データベースを使用するすべてのサービスと、各サービスの再起動に使用するラベルを示します。

<div id="platform-services">
  #### プラットフォーム サービス
</div>

| Consul Section Name  | サービス ラベル                          | 備考                                     |
| -------------------- | --------------------------------- | -------------------------------------- |
| api-gateway-registry | api-gateway-registry              |                                        |
| api-registry         | api-registry                      |                                        |
| auth-adminapi2       | auth-adminapi2                    |                                        |
| auth-identity        | auth-identity                     |                                        |
| auth                 | auth-sts-identity, auth-adminapi2 | このデータベースは 2 つのサービスで使用されます              |
| blob-storage         | blob-storage                      |                                        |
| cron-service         | cron-service                      |                                        |
| documentsetstorage   | documentsetstorage                |                                        |
| mail                 | mail                              |                                        |
| security-audit       | security-audit                    |                                        |
| storage              | storage                           | データベース セクションは fileMetadata カタログに格納されます |
| workflow-facade      | workflow-facade                   |                                        |
| workflow-scheduler   | workflow-scheduler                |                                        |

<div id="vantage-services">
  #### Vantage サービス
</div>

| Consul セクション名    | サービス ラベル         |
| ---------------- | ---------------- |
| catalogstorage   | catalogstorage   |
| folderimport     | folderimport     |
| interactive-jobs | interactive-jobs |
| mailimport       | mailimport       |
| permissions      | permissions      |
| publicapi        | publicapi        |
| reporting        | reporting        |
| secretstorage    | secretstorage    |
| skill-monitor    | skill-monitor    |
| skillinfo        | skillinfo        |
| subscriptions    | subscriptions    |
| tokenmanagement  | tokenmanagement  |
| transactions     | transactions     |
| workspace        | workspace        |

<div id="setting-up-gpu">
  ## GPU の設定
</div>

Vantage では、半構造化文書からデータを抽出する Deep Learning activity で Skill を学習する際に、GPU を使用できます。

<div id="system-requirements-for-gpu">
  ### GPU のシステム要件
</div>

* 仮想 GPU の最小 RAM: 12 GB
* ホスト上の仮想 GPU ごとに 1 CPU および 4 GB の RAM (例: 12 GB の単一仮想 GPU を持つ VM には、少なくとも 2 CPU および 8 GB の RAM が必要です)

<div id="virtual-gpu">
  ### 仮想 GPU
</div>

仮想 GPU (vGPU) を使用すると、1 台の物理 GPU を複数の仮想マシンに分割でき、Vantage のリソースをより効率的に活用できます。

vGPU を設定するには、次の手順を実行します。

1. nVidia application hub から nVidia GRID ドライバーパッケージを GPU 搭載の仮想マシンにコピーし、次のコマンドを実行します。

```bash theme={null}
apt-get update
apt-get install dkms
dpkg -i nvidia-linux-grid-535_535.54.03_amd64.deb
```

2. nVidia GPU オペレーターを Kubernetes クラスターにインストールします。

   a. Vantage インストーラーコンテナーを実行する前に、ライセンス トークン ファイル (nVidia application hub で生成) を `$PWD/gpu/` フォルダーに配置します。

   b. Vantage インストーラーコンテナーを実行するコマンドに `-v $PWD/gpu:/ansible/files/gpu:ro` パラメーターを追加します。

```bash theme={null}
docker run -it \
-v $PWD/kube:/root/.kube \
-v $PWD/ssh/ansible:/root/.ssh/ansible \
-v "//var/run/docker.sock:/var/run/docker.sock" \
-v $PWD/inventory:/ansible/inventories/k8s/inventory \
-v $PWD/env_specific.yml:/ansible/inventories/k8s/group_vars/all/env_specific.yml \
-v $PWD/ssl:/ansible/files/ssl:ro \
-v $PWD/gpu:/ansible/files/gpu:ro \
--privileged \
registry.local/vantage/vantage-k8s:2.7.1
```

c. `[abbyy_workers]` グループのインベントリファイルに GPU ノードを追加します。GPU を搭載した仮想マシンの名前には "gpu" が含まれている必要があります:

```ini theme={null}
[abbyy_workers]
worker16-48-w01 ansible_host=10.10.10.27
worker16-48-w02 ansible_host=10.10.10.21
worker16-48-w03 ansible_host=10.10.10.20
worker2-12-a40-gpu01 ansible_host=10.10.10.60
```

d. 次のプレイブックを実行して、クラスターにノードを追加します。

```bash theme={null}
chmod 600 /root/.ssh/ansible
ansible-playbook -i inventories/k8s -v playbooks/4-Kubernetes-k8s.yml
```

3. 次のプレイブックを実行して vGPU を設定します:

```bash theme={null}
ansible-playbook -i inventories/k8s -v playbooks/setup-gpu-node.yml
```

<div id="gpu-passthrough">
  ### GPU パススルー
</div>

GPU パススルーを設定すると、仮想マシンから GPU に直接アクセスできるようになります。

GPU パススルーを設定するには:

1. Vantage インストーラーコンテナーを実行します:

```bash theme={null}
docker run -it \
-v $PWD/kube:/root/.kube \
-v $PWD/ssh/ansible:/root/.ssh/ansible \
-v "//var/run/docker.sock:/var/run/docker.sock" \
-v $PWD/inventory:/ansible/inventories/k8s/inventory \
-v $PWD/env_specific.yml:/ansible/inventories/k8s/group_vars/all/env_specific.yml \
-v $PWD/ssl:/ansible/files/ssl:ro \
--privileged \
registry.local/vantage/vantage-k8s:2.7.1
```

2. GPU ノード (例: worker2-12-a40-gpu01) を、`[abbyy_workers]` グループのインベントリファイルに追加します:

```ini theme={null}
[abbyy_workers]
worker16-48-w01 ansible_host=10.10.10.27
worker16-48-w02 ansible_host=10.10.10.21
worker16-48-w03 ansible_host=10.10.10.20
worker2-12-a40-gpu01 ansible_host=10.10.10.60
```

3. プレイブックを実行します:

```bash theme={null}
ansible-playbook -i inventories/k8s -v playbooks/4-Kubernetes-k8s.yml
```

4. GPU オペレーターのHelm チャートをインストールします：

```bash theme={null}
helm upgrade --install gpu-operator ansible/files/helm/charts/gpu-operator --create-namespace --debug -n gpu-operator
```

5. ノードに taint を追加します:

```bash theme={null}
kubectl taint nodes worker2-12-a40-gpu01 nvidia.com/gpu:NoSchedule
```

<div id="testing-and-deploying-gpu">
  ### GPU のテストとデプロイ
</div>

vGPU モードと GPU パススルー モードのどちらでも、GPU オペレーターのインストールをテストするには:

1. 次のコマンドを実行します:

```bash theme={null}
kubectl apply -f filename
```

2. 以下の内容でYAMLファイルを作成し、適用します。

```yaml theme={null}
apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
  namespace: gpu-operator
spec:
  restartPolicy: Never
  containers:
    - name: cuda-container
      image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda10.2
      resources:
        limits:
          nvidia.com/gpu: 1 # GPU を 1 つリクエスト
  tolerations:
    - key: nvidia.com/gpu
      operator: Exists
      effect: NoSchedule
    - key: k8s.abbyy.com/techcore
      effect: NoSchedule
      value: "true"
```

3. pod のログを確認します。`Test PASSED` を含むレスポンスが表示されるはずです:

```bash theme={null}
kubectl -n gpu-operator logs gpu-pod
```

想定される出力:

```
[Vector addition of 50000 elements]
Copy input data from the host memory to the CUDA device
CUDA kernel launch with 196 blocks of 256 threads
Copy output data from the CUDA device to the host memory
Test PASSED
Done
```

GPU workerをデプロイするには：

1. 次のパラメーターを`env_specific.yml`ファイルに追加します：

```yaml theme={null}
techcore:
  use_gpu_workers: true
  use_nn_extraction_training_workers: true
```

2. 次のいずれかを行います。
   * Vantage がすでにインストールされている場合は、次のプレイブックを実行して GPU ワーカーをデプロイします。

```bash theme={null}
ansible-playbook -i inventories/k8s -v playbooks/11-DeployWorkers-k8s.yml
```

* Vantage がまだインストールされていない場合、GPU ワーカーはインストール時にデプロイされます。

<div id="setting-up-a-manual-review-inactivity-timeout">
  ## 手動確認の非アクティブタイムアウトの設定
</div>

手動確認では、開いているタスクに対してオペレーターが15分間まったく操作を行わないと、タイムアウトが発生します。システム管理者は、Consul を使用して、タイムアウトが発生するまでの非アクティブ状態の継続時間を変更できます。

タイムアウトを設定するには:

1. 次を実行して Consul の Web インターフェイスにアクセスします:

```bash theme={null}
kubectl port-forward -n abbyy-infrastructure service/consul-ui 8500:80
```

次に、`http://localhost:8500/ui/dc1/kv/secret/` を開きます。

2. **Key/Value** タブを使用して、適切な Vantage 環境を選択します。
3. 次のキーの値を変更します。

| Key                                                                                     | Description                                                                                                                                                            |
| --------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `secret/abbyy-vantage/vantage/verification/interactiveJobsOptions/popTimeout`           | ユーザーが無操作の状態になってから、タスクが対話型タスクキューに戻されるまでの最短時間です。対話型アクション (マウスの移動、キーボード入力、パッチ処理など) を行うと、カウントダウンはリセットされます。既定値: `00:15:00` (15 分)                                           |
| `secret/abbyy-vantage/vantage/verification/interactiveJobsOptions/processingPopTimeout` | 長時間の操作 (Skill の適用、ページ送りなど) がある場合に、タスクがキューに戻されるまでの最短無操作時間です。長時間実行される操作が開始されると、この値は許容される最大の無操作時間に設定されます。操作が完了すると、無操作時間は popTimeout の値にリセットされます。既定値: `1.00:00:00` (24 時間) |

4. **Save** をクリックします。
5. verification サービスと manualverification サービスを再起動します:

```bash theme={null}
kubectl -n abbyy-vantage rollout restart $(kubectl -n abbyy-vantage get deployments -l app.kubernetes.io/component=verification -o name)
```

```bash theme={null}
kubectl -n abbyy-vantage rollout restart $(kubectl -n abbyy-vantage get deployments -l app.kubernetes.io/component=manualverification -o name)
```

<div id="updating-the-ssl-certificate">
  ## SSL 証明書の更新
</div>

SSL 証明書の有効期限が切れた場合は、新しい証明書に差し替える必要があります。

<div id="using-lens">
  ### Lens を使用する
</div>

1. **Config > Secrets** に移動し、`platform-wildcard` という名前のすべてのシークレットを見つけます。
2. 各シークレットで **Data** サブセクションを見つけ、**Show** アイコンをクリックして値を更新します。
   * 新しい証明書の値を `tls.crt` field に入力します
   * そのキーの値を `tls.key` field に入力します

<Note>
  証明書とキーは、base64 ASCII エンコードされた内容 (PKCS#8) の PEM ファイルである必要があります。証明書は `-----BEGIN CERTIFICATE-----` で始まり、キーは `-----BEGIN PRIVATE KEY-----` で始まる必要があります。
</Note>

3. **Save** をクリックします。

<div id="using-linux-command-line">
  ### Linuxのコマンドラインを使用する
</div>

1. Kubernetesクラスターにアクセスできることを確認します。

```bash theme={null}
kubectl get nodes
```

2. 証明書と秘密鍵を PEM 形式の `cert.pem`、`key.pem` として現在のフォルダーに配置します。

必要に応じて、CRT ファイルを PEM 形式に変換します。

```
-----BEGIN CERTIFICATE-----
[your certificate]
-----END CERTIFICATE-----
```

```
-----BEGIN PRIVATE KEY-----
[your key]
-----END PRIVATE KEY-----
```

3. 次のコマンドを実行します:

```bash theme={null}
for i in `kubectl get secret --field-selector metadata.name=platform-wildcard -o custom-columns=:metadata.namespace -A --no-headers 2>/dev/null`; do kubectl patch secret platform-wildcard -p "{\"data\":{\"tls.key\":\"$(base64 < "./key.pem" | tr -d '\n')\", \"tls.crt\":\"$(base64 < "./cert.pem" | tr -d '\n')\"}}" -n $i; done
```

```bash theme={null}
kubectl rollout restart deployment -n abbyy-infrastructure $(kubectl get deployment -n abbyy-infrastructure -o custom-columns=NAME:metadata.name --no-headers 2>/dev/null | grep ingress-nginx-controller)
```
