> ## 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 Private Cloud で共有フォルダー、データベース接続、GPU サポート、処理タイムアウト、本番環境で使用する SSL/TLS 証明書を構成します。

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

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

共有フォルダー（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 で共有フォルダーのパスをコピーして使用したり、File Explorer で開いたりできるようになります。

<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
```

Then navigate to `http://localhost:8500/ui/dc1/kv/secret/`.

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

<img src="https://mintcdn.com/abbyy/-pYAPopytMRFrgKm/images/vantage/private-cloud/misc-p01-005.png?fit=max&auto=format&n=-pYAPopytMRFrgKm&q=85&s=1e0b59d2616def53fa6bc7b903860db8" alt="利用可能なサービスを示す Consul の platform サービス一覧" style={{ width:"53%" }} width="642" height="973" data-path="images/vantage/private-cloud/misc-p01-005.png" />

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

<img src="https://mintcdn.com/abbyy/-pYAPopytMRFrgKm/images/vantage/private-cloud/misc-p01-006.png?fit=max&auto=format&n=-pYAPopytMRFrgKm&q=85&s=c6e705ed683a373e87abb35463637d23" alt="Vantage 環境選択を示す Consul の Key/Value タブ" style={{ width:"58%" }} width="636" height="549" data-path="images/vantage/private-cloud/misc-p01-006.png" />

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

<img src="https://mintcdn.com/abbyy/-pYAPopytMRFrgKm/images/vantage/private-cloud/misc-p01-007.png?fit=max&auto=format&n=-pYAPopytMRFrgKm&q=85&s=40cdfc03a52e8ffefb42b7a323be8335" alt="SqlServer 設定を示す Consul の database セクション" style={{ width:"58%" }} width="695" height="539" data-path="images/vantage/private-cloud/misc-p01-007.png" />

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

<img src="https://mintcdn.com/abbyy/-pYAPopytMRFrgKm/images/vantage/private-cloud/misc-p01-008.png?fit=max&auto=format&n=-pYAPopytMRFrgKm&q=85&s=6803280d15df03d2e8cb756b6335ff31" alt="Consul の connectionString の値エディター" style={{ width:"59%" }} width="877" height="724" data-path="images/vantage/private-cloud/misc-p01-008.png" />

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">
  #### Platform Services
</div>

| Consul セクション名        | サービス ラベル                          | メモ                                          |
| -------------------- | --------------------------------- | ------------------------------------------- |
| 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 アクティビティを用いた Skill のトレーニングに GPU を使用できます。

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

* 仮想 GPU の最小メモリ（RAM）: 12 GB
* ホスト上の仮想 GPU 1 つあたり、1 CPU と 4 GB の RAM（例: 12 GB の仮想 GPU を 1 基搭載した 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 Operator の 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 # 1つのGPUをリクエスト
  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. 次の Parameter を `env_specific.yml` ファイルに追加します。

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

2. 次のいずれかを実行します。
   * すでに Vantage がインストールされている場合は、以下の playbook を実行して 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` という名前のすべての secret を探します。
2. 各 secret について、**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)
```
