ABBYY Vantage를 사용하면 문서와 스킬을 가져오고 내보내며 데이터 카탈로그를 업데이트하기 위해 Vantage 서버에 호스팅된 공유 폴더를 사용할 수 있습니다.
공유 폴더(NFS 공유)를 사용하기 전에 클라이언트 컴퓨터에서 해당 공유 폴더에 대한 연결을 먼저 설정해야 합니다. Windows를 사용하는 클라이언트 컴퓨터에서 다음 단계를 수행합니다:
- Windows PowerShell을 관리자 권한으로 실행합니다.
- Windows NFS 클라이언트를 설치합니다:
dism /online /Enable-Feature /FeatureName:ServicesForNFS-ClientOnly
dism /online /Enable-Feature /FeatureName:ClientForNFS-Infrastructure
- 회사 정책에 따라 Windows 사용자 계정을 Unix UID 및 GID에 매핑하도록 구성합니다:
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
- NFS 클라이언트 재시작:
nfsadmin client stop
nfsadmin client start
위 단계를 모두 완료하면 Vantage에서 공유 폴더 경로를 복사해 사용할 수 있고, 파일 탐색기에서 해당 경로를 열 수도 있습니다.
ABBYY Vantage는 외부 서버에 호스팅되는 데이터베이스를 사용하며, 해당 서버에 장애가 발생하면 동작하지 않을 수 있습니다. 시스템 관리자는 이러한 데이터베이스를 다른 서버에 복원한 다음, Consul을 사용하여 새 데이터베이스에 대한 연결을 설정할 수 있습니다.
시작하기 전에 kubectl 명령줄 도구가 설치되어 있고 Kubernetes 클러스터에 대한 연결이 설정되어 있는지 확인하십시오.
ABBYY Vantage 설정에서 새 데이터베이스에 대한 연결을 설정하려면:
- 아래 명령을 실행하여 Consul 웹 인터페이스에 액세스합니다:
kubectl port-forward -n abbyy-infrastructure service/consul-ui 8500:80
그런 다음 http://localhost:8500/ui/dc1/kv/secret/로 이동합니다.
- 열린 Key/Value 탭에서 올바른 Vantage 환경을 선택합니다.
- platform 또는 vantage 프로젝트 중 하나와 데이터베이스를 사용하는 적절한 서비스(예: mail)를 선택합니다.
- 모든 서비스에 포함된 database 섹션으로 이동합니다.
- SqlServer 섹션을 엽니다.
- connectionString 키에서:
- Server의 이전 값을 새 서버 주소로 바꿉니다.
- Database parameter에 새 데이터베이스를 지정합니다.
- User Id 및 Password parameters에 로그인 자격 증명을 지정합니다.
- Save를 클릭합니다.
- 다음 명령을 실행하여 수정된 서비스를 다시 시작합니다:
label=mail
kubectl -n abbyy-vantage rollout restart $(kubectl -n abbyy-vantage get deployments -l app.kubernetes.io/component=$label -o name)
서버 주소가 변경될 때마다 이 절차를 각 데이터베이스에 대해 수행해야 합니다.
Database Services Reference
아래 표에는 데이터베이스를 사용하는 모든 서비스와 각 서비스를 다시 시작할 때 사용하는 레이블이 나와 있습니다.
| 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 | 이 데이터베이스는 두 개의 서비스에서 사용됩니다. |
| 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 | |
| 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 |
Vantage에서는 GPU를 사용하여 Deep Learning activity로 반정형 문서에서 데이터를 추출하는 스킬을 학습할 수 있습니다.
- 가상 GPU의 최소 RAM 용량: 12 GB
- 호스트의 각 가상 GPU당 CPU 1개와 RAM 4 GB 필요 (예: 12 GB 용량의 단일 가상 GPU가 있는 VM은 최소 CPU 2개와 RAM 8 GB를 보유해야 함)
가상 GPU(vGPU)를 사용하면 하나의 물리 GPU를 여러 가상 머신에서 사용할 수 있도록 나누어 Vantage 리소스를 보다 효율적으로 활용할 수 있습니다.
vGPU를 설정하려면:
- nVidia 애플리케이션 허브에서 nVidia GRID 드라이버 패키지를 GPU가 포함된 가상 머신으로 복사한 후 다음 명령을 실행합니다:
apt-get update
apt-get install dkms
dpkg -i nvidia-linux-grid-535_535.54.03_amd64.deb
-
nVidia GPU operator를 Kubernetes 클러스터에 설치합니다:
a. Vantage 설치 프로그램 컨테이너를 실행하기 전에 nVidia application hub에서 생성된 라이선스 토큰 파일을
$PWD/gpu/ 폴더에 둡니다.
b. Vantage 설치 프로그램 컨테이너를 실행하는 명령에 -v $PWD/gpu:/ansible/files/gpu:ro Parameter를 추가합니다:
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”가 포함되어야 합니다:
[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. 다음 플레이북을 실행해 클러스터에 노드를 추가합니다.
chmod 600 /root/.ssh/ansible
ansible-playbook -i inventories/k8s -v playbooks/4-Kubernetes-k8s.yml
- 다음 플레이북을 실행하여 vGPU를 설정합니다.
ansible-playbook -i inventories/k8s -v playbooks/setup-gpu-node.yml
가상 머신이 GPU에 직접 액세스할 수 있도록 GPU 패스스루를 설정할 수 있습니다.
GPU 패스스루를 설정하려면:
- Vantage 설치 프로그램 컨테이너를 실행합니다:
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
- GPU 노드(예: worker2-12-a40-gpu01)를 인벤토리 파일의
[abbyy_workers] 그룹에 추가합니다.
[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
- 플레이북을 실행합니다:
ansible-playbook -i inventories/k8s -v playbooks/4-Kubernetes-k8s.yml
- GPU Operator Helm 차트를 설치합니다:
helm upgrade --install gpu-operator ansible/files/helm/charts/gpu-operator --create-namespace --debug -n gpu-operator
- 노드에 테인트를 추가합니다:
kubectl taint nodes worker2-12-a40-gpu01 nvidia.com/gpu:NoSchedule
vGPU 모드와 GPU 패스스루 모드 모두에서 GPU Operator 설치를 테스트하려면:
- 다음 명령을 실행합니다.
kubectl apply -f filename
- 다음 내용을 포함한 YAML 파일을 생성하여 적용합니다:
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"
- Pod 로그를 확인합니다.
Test PASSED 문구가 포함된 응답이 표시되어야 합니다:
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를 배포하려면:
- 다음 Parameter를
env_specific.yml 파일에 추가합니다.
techcore:
use_gpu_workers: true
use_nn_extraction_training_workers: true
- 다음 중 하나를 수행합니다.
- 이미 Vantage가 설치된 경우 GPU 워커를 배포하려면 다음 플레이북을 실행합니다.
ansible-playbook -i inventories/k8s -v playbooks/11-DeployWorkers-k8s.yml
- 아직 Vantage가 설치되지 않은 경우, 설치 시 GPU 워커가 배포됩니다.
수동 검토에서 열려 있는 작업에 대해 운영자가 15분 동안 아무런 작업도 수행하지 않으면 타임아웃이 발생합니다. 시스템 관리자는 Consul을 사용하여 타임아웃이 발생하기까지 필요한 미활동 시간의 길이를 변경할 수 있습니다.
타임아웃을 구성하려면:
- 다음을 실행하여 Consul 웹 인터페이스에 액세스합니다:
kubectl port-forward -n abbyy-infrastructure service/consul-ui 8500:80
그런 다음 http://localhost:8500/ui/dc1/kv/secret/로 이동합니다.
- Key/Value 탭을 사용하여 올바른 Vantage 환경을 선택합니다.
- 다음 키의 값을 변경합니다:
| Key | Description |
|---|
secret/abbyy-vantage/vantage/verification/interactiveJobsOptions/popTimeout | 사용자가 비활성 상태가 된 후 작업이 대화형 작업 큐로 반환되기 전까지의 최소 시간입니다. 모든 대화형 동작(마우스 이동, 키보드 입력, 패치 처리 등)은 카운트다운을 재설정합니다. 기본값: 00:15:00(15분) |
secret/abbyy-vantage/vantage/verification/interactiveJobsOptions/processingPopTimeout | 장기 실행 작업(스킬 적용, 페이지 넘기기 등)이 있는 경우, 사용자가 비활성 상태일 때 작업이 큐로 반환되기까지의 최소 시간입니다. 장기 실행 작업이 시작되면 이 값은 허용되는 최대 비활성 시간으로 설정됩니다. 작업이 완료되면 비활성 시간은 popTimeout 값으로 다시 설정됩니다. 기본값: 1.00:00:00(24시간) |
- Save를 클릭합니다.
- verification 및 manualverification 서비스를 다시 시작합니다:
kubectl -n abbyy-vantage rollout restart $(kubectl -n abbyy-vantage get deployments -l app.kubernetes.io/component=verification -o name)
kubectl -n abbyy-vantage rollout restart $(kubectl -n abbyy-vantage get deployments -l app.kubernetes.io/component=manualverification -o name)
SSL 인증서가 만료되면 새 인증서로 변경해야 합니다.
- Config > Secrets로 이동하여 이름이
platform-wildcard인 모든 시크릿을 찾습니다.
- 각 시크릿에 대해 Data 하위 섹션에서 Show 아이콘을 클릭한 다음 값을 업데이트합니다.
- 새 인증서 값을
tls.crt field에 입력합니다.
- 해당 키 값을
tls.key field에 입력합니다.
인증서와 키는 base64 ASCII로 인코딩된 내용(PKCS#8)이 포함된 PEM 파일이어야 합니다. 인증서 파일은 -----BEGIN CERTIFICATE-----로, 키 파일은 -----BEGIN PRIVATE KEY-----로 시작해야 합니다.
- Save를 클릭합니다.
- Kubernetes 클러스터에 대한 액세스 권한이 있는지 확인합니다.
- 인증서와 키를 PEM 형식으로 변환하여 현재 폴더에 저장합니다:
cert.pem, key.pem.
필요한 경우 CRT 파일을 PEM 형식으로 변환합니다:
-----BEGIN CERTIFICATE-----
[사용자의 인증서]
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
[your key]
-----END PRIVATE KEY-----
- 다음 명령을 실행합니다:
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
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)