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

# Configuración

> Configure ABBYY Vantage autoalojado: carpetas compartidas, conexiones a bases de datos, compatibilidad con GPU, tiempos de espera de procesamiento y certificados SSL/TLS para entornos de producción.

<div id="setting-up-a-shared-folder-connection">
  ## Configuración de una conexión a una carpeta compartida
</div>

ABBYY Vantage le permite usar carpetas compartidas alojadas en el servidor de Vantage para importar y exportar documentos y skills, así como para actualizar catálogos de datos.

Antes de empezar a usar carpetas compartidas (recurso compartido NFS), debe configurar una conexión a esas carpetas compartidas desde un equipo cliente. Realice los siguientes pasos en un equipo cliente con Windows:

1. Ejecute Windows PowerShell como Administrador.
2. Instale el Cliente NFS de Windows:

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

3. Configure la asignación de usuarios de Windows a los UID y GID de Unix según las políticas de su empresa:

```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. Reinicie el cliente NFS:

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

Una vez completados los pasos anteriores, podrá copiar y usar las rutas de las carpetas compartidas en Vantage, así como abrirlas en el Explorador de archivos.

<div id="setting-up-a-database-connection">
  ## Configurar una conexión a una base de datos
</div>

ABBYY Vantage utiliza bases de datos alojadas en servidores externos y puede dejar de funcionar si esos servidores fallan. El Administrador del sistema puede restaurar esas bases de datos en otro servidor y configurar una conexión a las nuevas bases de datos mediante Consul.

<Note>
  Antes de comenzar, asegúrese de que la herramienta de línea de comandos kubectl esté instalada y de que se haya establecido una conexión con el clúster de Kubernetes.
</Note>

Para configurar una conexión a una nueva base de datos en la configuración de ABBYY Vantage:

1. Acceda a la interfaz web de Consul ejecutando el siguiente comando:

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

Luego, vaya a `http://localhost:8500/ui/dc1/kv/secret/`.

2. Use la pestaña **Key/Value** que se abrirá para seleccionar el entorno de Vantage adecuado.
3. Seleccione el proyecto **platform** o **vantage**, así como el servicio correspondiente que usa la base de datos (por ejemplo, mail).

<img src="https://mintlify.s3.us-west-1.amazonaws.com/abbyy/images/vantage/self-hosted/misc-p01-005.png" alt="Lista de servicios de la plataforma Consul que muestra los servicios disponibles" style={{ width:"53%" }} />

4. Vaya a la sección **database** de cada servicio.

<img src="https://mintlify.s3.us-west-1.amazonaws.com/abbyy/images/vantage/self-hosted/misc-p01-006.png" alt="Pestaña Key/Value de Consul que muestra la selección del entorno de Vantage" style={{ width:"58%" }} />

6. Abra la sección **SqlServer**.

<img src="https://mintlify.s3.us-west-1.amazonaws.com/abbyy/images/vantage/self-hosted/misc-p01-007.png" alt="Sección de base de datos de Consul que muestra la configuración de SqlServer" style={{ width:"58%" }} />

6. En la clave **connectionString**:
   * Reemplace el valor anterior de **Server** por la dirección del nuevo servidor
   * Especifique la nueva base de datos en el parámetro **Database**
   * Especifique las credenciales de acceso en los parámetros **User Id** y **Password**

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

7. Haga clic en **Save**.
8. Reinicie el servicio modificado ejecutando el siguiente comando:

```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>
  Si cambia la dirección del servidor, este procedimiento debe realizarse para cada base de datos.
</Note>

<div id="database-services-reference">
  ### Referencia de los servicios de base de datos
</div>

A continuación se muestra una tabla con todos los servicios que usan la base de datos, así como la etiqueta correspondiente para reiniciar cada servicio.

<div id="platform-services">
  #### Servicios de la plataforma
</div>

| Nombre de la sección de Consul | Etiqueta de servicio              | Notas                                                                |
| ------------------------------ | --------------------------------- | -------------------------------------------------------------------- |
| api-gateway-registry           | api-gateway-registry              |                                                                      |
| api-registry                   | api-registry                      |                                                                      |
| auth-adminapi2                 | auth-adminapi2                    |                                                                      |
| auth-identity                  | auth-identity                     |                                                                      |
| auth                           | auth-sts-identity, auth-adminapi2 | Esta base de datos la utilizan dos servicios                         |
| blob-storage                   | blob-storage                      |                                                                      |
| cron-service                   | cron-service                      |                                                                      |
| documentsetstorage             | documentsetstorage                |                                                                      |
| mail                           | mail                              |                                                                      |
| security-audit                 | security-audit                    |                                                                      |
| storage                        | storage                           | La sección de la base de datos se guarda en el catálogo fileMetadata |
| workflow-facade                | workflow-facade                   |                                                                      |
| workflow-scheduler             | workflow-scheduler                |                                                                      |

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

| Nombre de la sección de Consul | Etiqueta de servicio |
| ------------------------------ | -------------------- |
| 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">
  ## Configuración de la GPU
</div>

Vantage le permite usar la GPU para entrenar skills con la actividad de Deep Learning y extraer datos de documentos semiestructurados.

<div id="system-requirements-for-gpu">
  ### Requisitos del sistema para GPU
</div>

* RAM mínima de la GPU virtual: 12 GB
* 1 CPU y 4 GB de RAM por cada GPU virtual en el host (p. ej., una VM con una sola GPU virtual de 12 GB debe tener al menos 2 CPU y 8 GB de RAM)

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

Puede usar una GPU virtual (vGPU) para dividir una GPU física en varias máquinas virtuales, lo que permite utilizar los recursos de Vantage de forma más eficiente.

Para configurar vGPU:

1. Copie el paquete del controlador NVIDIA GRID desde el Application Hub de NVIDIA a una máquina virtual con una GPU y ejecute los siguientes comandos:

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

2. Instale el operador de GPU de nVidia en el clúster de Kubernetes:

   a. Coloque el archivo de token de licencia (generado en el centro de aplicaciones de nVidia) en la carpeta `$PWD/gpu/` antes de ejecutar el contenedor del instalador de Vantage.

   b. Añada el parámetro `-v $PWD/gpu:/ansible/files/gpu:ro` al comando para ejecutar el contenedor del instalador de 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 \
-v $PWD/gpu:/ansible/files/gpu:ro \
--privileged \
registry.local/vantage/vantage-k8s:2.7.1
```

c. Añada un nodo GPU al archivo de inventario en el grupo `[abbyy_workers]`. El nombre de la máquina virtual con la GPU debe contener "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. Añada un nodo al clúster ejecutando el siguiente playbook:

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

3. Configure la vGPU ejecutando el siguiente playbook:

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

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

Puede configurar el passthrough de GPU, que permite a una máquina virtual acceder directamente a su GPU.

Para configurar el passthrough de GPU:

1. Ejecute el contenedor del instalador de 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. Añada un nodo GPU (por ejemplo, worker2-12-a40-gpu01) al archivo de inventario en el grupo `[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. Ejecute el playbook:

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

4. Instale el chart de Helm del operador de GPU:

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

5. Añada un `taint` al nodo:

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

<div id="testing-and-deploying-gpu">
  ### Prueba y despliegue de GPU
</div>

Tanto en el modo vGPU como en el de passthrough de GPU, para probar la instalación de un operador de GPU:

1. Ejecute este comando:

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

2. Cree un archivo YAML con el siguiente contenido y aplíquelo:

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

3. Consulte el registro del pod. Debería ver una respuesta con `Test PASSED`:

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

Resultado esperado:

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

Para desplegar el worker de GPU:

1. Agrega los siguientes parámetros al archivo `env_specific.yml`:

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

2. Realice una de las siguientes acciones:
   * Si Vantage ya está instalado, ejecute el siguiente playbook para desplegar workers de GPU:

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

* Si Vantage aún no está instalado, los workers de GPU se desplegarán durante la instalación.

<div id="setting-up-a-manual-review-inactivity-timeout">
  ## Configuración del tiempo de espera por inactividad en la revisión manual
</div>

En la revisión manual, si el Operador no realiza ninguna acción en una tarea abierta durante un período de 15 minutos, se activa un tiempo de espera. El Administrador del sistema puede cambiar la duración de inactividad necesaria para que se active este tiempo de espera mediante Consul.

Para configurar el tiempo de espera:

1. Acceda a la interfaz web de Consul ejecutando:

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

A continuación, vaya a `http://localhost:8500/ui/dc1/kv/secret/`.

2. Use la pestaña **Key/Value** para seleccionar el entorno de Vantage correcto.
3. Cambie los valores de las siguientes claves:

| Clave                                                                                   | Descripción                                                                                                                                                                                                                                                                                                                                                                                                                 |
| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `secret/abbyy-vantage/vantage/verification/interactiveJobsOptions/popTimeout`           | El tiempo mínimo que un usuario puede permanecer inactivo antes de que una tarea vuelva a la cola de tareas interactivas. Cualquier acción interactiva (movimiento del ratón, pulsación de teclas, procesamiento de parches, etc.) reinicia la cuenta atrás. Predeterminado: `00:15:00` (15 minutos)                                                                                                                        |
| `secret/abbyy-vantage/vantage/verification/interactiveJobsOptions/processingPopTimeout` | El tiempo mínimo de inactividad del usuario tras el cual la tarea volverá a la cola si hay operaciones de larga duración (aplicar una skill, pasar páginas, etc.). Cuando comienza una operación de larga duración, este valor se establece en el tiempo máximo de inactividad permitido. Cuando la operación finaliza, el tiempo de inactividad se restablece al valor popTimeout. Predeterminado: `1.00:00:00` (24 horas) |

4. Haga clic en **Save**.
5. Reinicie los servicios verification y 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">
  ## Actualización del certificado SSL
</div>

Cuando caduque el certificado SSL, deberá sustituirlo por el nuevo certificado.

<div id="using-lens">
  ### Uso de Lens
</div>

1. Vaya a **Config > Secrets** y busque todos los secrets llamados `platform-wildcard`.
2. Para cada secret, busque la subsección **Data**, haga clic en el icono **Show** y actualice los valores:
   * Introduzca el valor del certificado nuevo en el campo `tls.crt`
   * Introduzca el valor de su clave en el campo `tls.key`

<Note>
  El certificado y la clave deben ser archivos PEM con contenido ASCII codificado en base64 (PKCS#8). Deben empezar por `-----BEGIN CERTIFICATE-----` en el caso del certificado y por `-----BEGIN PRIVATE KEY-----` en el caso de la clave.
</Note>

3. Haga clic en **Save**.

<div id="using-linux-command-line">
  ### Uso de la línea de comandos en Linux
</div>

1. Asegúrese de tener acceso al clúster de Kubernetes:

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

2. Coloque el certificado y la clave en formato PEM en la carpeta actual: `cert.pem`, `key.pem`.

Convierta su archivo CRT a formato PEM si es necesario:

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

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

3. Ejecute los siguientes comandos:

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