> ## 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.

# Konfiguration

> Konfigurieren Sie ABBYY Vantage in der selbstgehosteten Bereitstellung: freigegebene Ordner, Datenbankverbindungen, GPU-Unterstützung, Verarbeitungs-Timeouts und SSL/TLS-Zertifikate für den Produktionseinsatz.

<div id="setting-up-a-shared-folder-connection">
  ## Einrichten einer Verbindung zu einem freigegebenen Ordner
</div>

Mit ABBYY Vantage können Sie auf dem Vantage-Server gehostete freigegebene Ordner zum Import und Export von Dokumenten und Skills sowie zum Aktualisieren von Datenkatalogen verwenden.

Bevor Sie freigegebene Ordner (NFS-Freigabe) verwenden können, müssen Sie auf einem Client-Computer eine Verbindung zu diesen freigegebenen Ordnern einrichten. Führen Sie die folgenden Schritte auf einem Client-Computer mit Windows aus:

1. Starten Sie Windows PowerShell als Administrator.
2. Installieren Sie den Windows-NFS-Client:

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

3. Konfigurieren Sie entsprechend den Richtlinien Ihres Unternehmens eine Zuordnung von Windows-Benutzern zu Unix-UIDs und -GIDs:

```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-Client neu starten:

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

Sobald Sie die vorherigen Schritte abgeschlossen haben, können Sie in Vantage Pfade zu freigegebenen Ordnern kopieren und verwenden sowie diese im Datei-Explorer öffnen.

<div id="setting-up-a-database-connection">
  ## Einrichten einer Datenbankverbindung
</div>

ABBYY Vantage verwendet Datenbanken, die auf externen Servern gehostet werden, und kann nicht mehr funktionsfähig sein, wenn diese Server ausfallen. Der Systemadministrator kann solche Datenbanken auf einem anderen Server wiederherstellen und mithilfe von Consul eine Verbindung zu den neuen Datenbanken einrichten.

<Note>
  Bevor Sie beginnen, stellen Sie sicher, dass das `kubectl`-Befehlszeilentool installiert ist und eine Verbindung zum Kubernetes-Cluster besteht.
</Note>

Gehen Sie wie folgt vor, um in den ABBYY Vantage-Einstellungen eine Verbindung zu einer neuen Datenbank einzurichten:

1. Rufen Sie die Consul-Weboberfläche auf, indem Sie den folgenden Befehl ausführen:

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

Navigieren Sie dann zu `http://localhost:8500/ui/dc1/kv/secret/`.

2. Verwenden Sie die Registerkarte **Key/Value**, die sich öffnet, um die richtige Vantage-Umgebung auszuwählen.
3. Wählen Sie entweder das Projekt **platform** oder **vantage** sowie den entsprechenden Service aus, der die Datenbank verwendet (zum Beispiel mail).

<img src="https://mintlify.s3.us-west-1.amazonaws.com/abbyy/images/vantage/self-hosted/misc-p01-005.png" alt="Consul-Liste der platform-Services mit den verfügbaren Services" style={{ width:"53%" }} />

4. Navigieren Sie zum Abschnitt **database**, den jeder Service enthält.

<img src="https://mintlify.s3.us-west-1.amazonaws.com/abbyy/images/vantage/self-hosted/misc-p01-006.png" alt="Consul-Registerkarte Key/Value zur Auswahl der Vantage-Umgebung" style={{ width:"58%" }} />

6. Öffnen Sie den Abschnitt **SqlServer**.

<img src="https://mintlify.s3.us-west-1.amazonaws.com/abbyy/images/vantage/self-hosted/misc-p01-007.png" alt="Consul-Abschnitt database mit der SqlServer-Konfiguration" style={{ width:"58%" }} />

6. Im Schlüssel **connectionString**:
   * Ersetzen Sie den alten Wert von **Server** durch die Adresse des neuen Servers
   * Geben Sie die neue Datenbank im Parameter **Database** an
   * Geben Sie die Anmeldedaten in den Parametern **User Id** und **Password** an

<img src="https://mintlify.s3.us-west-1.amazonaws.com/abbyy/images/vantage/self-hosted/misc-p01-008.png" alt="Consul-Werteditor für connectionString" style={{ width:"59%" }} />

7. Klicken Sie auf **Save**.
8. Starten Sie den geänderten Service neu, indem Sie den folgenden Befehl ausführen:

```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>
  Wenn sich eine Serveradresse ändert, muss dieser Vorgang für jede Datenbank durchgeführt werden.
</Note>

<div id="database-services-reference">
  ### Referenz zu Datenbank-Services
</div>

Nachfolgend finden Sie eine Tabelle mit allen Services, die die Datenbank verwenden, sowie der jeweiligen Bezeichnung zum Neustarten der einzelnen Services.

<div id="platform-services">
  #### Plattform-Services
</div>

| Name des Consul-Abschnitts | Service-Bezeichnung               | Hinweise                                                       |
| -------------------------- | --------------------------------- | -------------------------------------------------------------- |
| api-gateway-registry       | api-gateway-registry              |                                                                |
| api-registry               | api-registry                      |                                                                |
| auth-adminapi2             | auth-adminapi2                    |                                                                |
| auth-identity              | auth-identity                     |                                                                |
| auth                       | auth-sts-identity, auth-adminapi2 | Diese Datenbank wird von zwei Services genutzt                 |
| blob-storage               | blob-storage                      |                                                                |
| cron-service               | cron-service                      |                                                                |
| documentsetstorage         | documentsetstorage                |                                                                |
| mail                       | mail                              |                                                                |
| security-audit             | security-audit                    |                                                                |
| storage                    | storage                           | Der Datenbankabschnitt ist im fileMetadata-Katalog gespeichert |
| workflow-facade            | workflow-facade                   |                                                                |
| workflow-scheduler         | workflow-scheduler                |                                                                |

<div id="vantage-services">
  #### Vantage-Services
</div>

| Name des Consul-Abschnitts | Service-Bezeichnung |
| -------------------------- | ------------------- |
| 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 einrichten
</div>

Mit Vantage können Sie die GPU verwenden, um Skills mit der Deep-Learning-Aktivität für die Datenextraktion aus teilstrukturierten Dokumenten zu trainieren.

<div id="system-requirements-for-gpu">
  ### Systemanforderungen für GPU
</div>

* Mindest-RAM der virtuellen GPU: 12 GB
* 1 CPU und 4 GB RAM für jede virtuelle GPU auf dem Host (z. B. muss eine VM mit einer einzelnen virtuellen GPU mit 12 GB mindestens 2 CPU und 8 GB RAM haben)

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

Sie können eine virtuelle GPU (vGPU) verwenden, um eine physische GPU in mehrere virtuelle Maschinen aufzuteilen, sodass Vantage-Ressourcen effizienter genutzt werden können.

So richten Sie eine vGPU ein:

1. Kopieren Sie das nVidia-GRID-Treiberpaket aus dem nVidia Application Hub auf eine virtuelle Maschine mit GPU und führen Sie die folgenden Befehle aus:

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

2. Installieren Sie den nVidia GPU-Operator auf dem Kubernetes-Cluster:

   a. Legen Sie die Lizenz-Token-Datei (die im nVidia Application Hub generiert wurde) vor dem Ausführen des Vantage-Installer-Containers im Ordner `$PWD/gpu/` ab.

   b. Fügen Sie den Parameter `-v $PWD/gpu:/ansible/files/gpu:ro` dem Befehl zum Ausführen des Vantage-Installer-Containers hinzu:

```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. Fügen Sie in der Inventardatei in der Gruppe `[abbyy_workers]` einen GPU-Knoten hinzu. Der Name der virtuellen Maschine mit der GPU muss "gpu" enthalten:

```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. Fügen Sie dem Cluster einen Knoten hinzu, indem Sie folgendes Playbook ausführen:

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

3. Richten Sie vGPU ein, indem Sie das folgende Playbook ausführen:

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

<div id="gpu-passthrough">
  ### GPU-Passthrough
</div>

Sie können GPU-Passthrough einrichten. Dadurch erhält eine virtuelle Maschine direkten Zugriff auf Ihre GPU.

So richten Sie GPU-Passthrough ein:

1. Führen Sie den Vantage-Installer-Container aus:

```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. Fügen Sie in der Inventardatei der Gruppe `[abbyy_workers]` einen GPU-Knoten (z. B. worker2-12-a40-gpu01) hinzu:

```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. Führen Sie das Playbook aus:

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

4. Installieren Sie das Helm-Chart für den GPU-Operator:

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

5. Fügen Sie einen Node-Taint hinzu:

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

<div id="testing-and-deploying-gpu">
  ### Testen und Bereitstellen von GPUs
</div>

Um die Installation des GPU-Operators sowohl im vGPU- als auch im GPU-Passthrough-Modus zu testen:

1. Führen Sie diesen Befehl aus:

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

2. Erstellen Sie eine YAML-Datei mit folgendem Inhalt und wenden Sie sie an:

```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 anfordern
  tolerations:
    - key: nvidia.com/gpu
      operator: Exists
      effect: NoSchedule
    - key: k8s.abbyy.com/techcore
      effect: NoSchedule
      value: "true"
```

3. Überprüfen Sie das Pod-Log. Es sollte eine Antwort mit `Test PASSED` angezeigt werden:

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

Erwartete Ausgabe:

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

So stellen Sie den GPU-Worker bereit:

1. Fügen Sie die folgenden Parameter in der Datei `env_specific.yml` hinzu:

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

2. Führen Sie einen der folgenden Schritte aus:
   * Wenn Vantage bereits installiert ist, führen Sie das folgende Playbook aus, um GPU-Worker bereitzustellen:

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

* Wenn Vantage noch nicht installiert ist, werden die GPU-Worker während der Installation mitinstalliert.

<div id="setting-up-a-manual-review-inactivity-timeout">
  ## Einrichten eines Inaktivitäts-Timeouts für die Manuelle Überprüfung
</div>

Wenn in der Manuellen Überprüfung bei einer offenen Aufgabe 15 Minuten lang keine Aktionen durch den Operator ausgeführt werden, wird ein Timeout ausgelöst. Der Systemadministrator kann die für ein Timeout erforderliche Dauer der Inaktivität mit Consul ändern.

So konfigurieren Sie das Timeout:

1. Greifen Sie auf die Consul-Weboberfläche zu, indem Sie Folgendes ausführen:

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

Navigieren Sie dann zu `http://localhost:8500/ui/dc1/kv/secret/`.

2. Verwenden Sie die Registerkarte **Key/Value**, um die richtige Vantage-Umgebung auszuwählen.
3. Ändern Sie die Werte der folgenden Schlüssel:

| Schlüssel                                                                               | Beschreibung                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `secret/abbyy-vantage/vantage/verification/interactiveJobsOptions/popTimeout`           | Die Mindestdauer der Inaktivität eines Benutzers, nach der eine Aufgabe an die interaktive Aufgaben-Warteschlange zurückgegeben wird. Jede interaktive Aktion (Mausbewegung, Tastatureingabe, Patch-Verarbeitung usw.) setzt den Countdown zurück. Standard: `00:15:00` (15 Minuten)                                                                                                                                                                          |
| `secret/abbyy-vantage/vantage/verification/interactiveJobsOptions/processingPopTimeout` | Die Mindestdauer der Benutzerinaktivität, nach der die Aufgabe an die Warteschlange zurückgegeben wird, wenn länger dauernde Vorgänge ausgeführt werden (Anwenden eines Skills, Seiten umblättern usw.). Wenn ein lang andauernder Vorgang beginnt, wird dieser Wert auf die maximal zulässige Inaktivitätsdauer gesetzt. Nach Abschluss des Vorgangs wird die Inaktivitätsdauer auf den Wert `popTimeout` zurückgesetzt. Standard: `1.00:00:00` (24 Stunden) |

4. Klicken Sie auf **Speichern**.
5. Starten Sie die Services `verification` und `manualverification` neu:

```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">
  ## Aktualisieren des SSL-Zertifikats
</div>

Wenn das SSL-Zertifikat abläuft, müssen Sie auf das neue Zertifikat umstellen.

<div id="using-lens">
  ### Verwenden von Lens
</div>

1. Gehen Sie zu **Config > Secrets** und suchen Sie alle Secrets mit dem Namen `platform-wildcard`.
2. Suchen Sie bei jedem Secret den Unterabschnitt **Data**, klicken Sie auf das Symbol **Show** und aktualisieren Sie die Werte:
   * Geben Sie den Wert des neuen Zertifikats in das Feld `tls.crt` ein
   * Geben Sie den Wert des zugehörigen Schlüssels in das Feld `tls.key` ein

<Note>
  Das Zertifikat und der Schlüssel müssen PEM-Dateien mit Base64-ASCII-codiertem Inhalt (PKCS#8) sein. Sie sollten beim Zertifikat mit `-----BEGIN CERTIFICATE-----` und beim Schlüssel mit `-----BEGIN PRIVATE KEY-----` beginnen.
</Note>

3. Klicken Sie auf **Save**.

<div id="using-linux-command-line">
  ### Über die Linux-Befehlszeile
</div>

1. Stellen Sie sicher, dass Sie Zugriff auf den Kubernetes-Cluster haben:

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

2. Legen Sie das Zertifikat und den Schlüssel im PEM-Format in den aktuellen Ordner: `cert.pem`, `key.pem`.

Konvertieren Sie Ihre CRT-Datei bei Bedarf in das PEM-Format:

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

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

3. Führen Sie die folgenden Befehle aus:

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