메인 콘텐츠로 건너뛰기

공유 폴더 연결 설정

ABBYY Vantage를 사용하면 문서와 스킬을 가져오고 내보내며 데이터 카탈로그를 업데이트하기 위해 Vantage 서버에 호스팅된 공유 폴더를 사용할 수 있습니다. 공유 폴더(NFS 공유)를 사용하기 전에 클라이언트 컴퓨터에서 해당 공유 폴더에 대한 연결을 먼저 설정해야 합니다. Windows를 사용하는 클라이언트 컴퓨터에서 다음 단계를 수행합니다:
  1. Windows PowerShell을 관리자 권한으로 실행합니다.
  2. Windows NFS 클라이언트를 설치합니다:
dism /online /Enable-Feature /FeatureName:ServicesForNFS-ClientOnly
dism /online /Enable-Feature /FeatureName:ClientForNFS-Infrastructure
  1. 회사 정책에 따라 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
  1. NFS 클라이언트 재시작:
nfsadmin client stop
nfsadmin client start
위 단계를 모두 완료하면 Vantage에서 공유 폴더 경로를 복사해 사용할 수 있고, 파일 탐색기에서 해당 경로를 열 수도 있습니다.

데이터베이스 연결 설정

ABBYY Vantage는 외부 서버에 호스팅되는 데이터베이스를 사용하며, 해당 서버에 장애가 발생하면 동작하지 않을 수 있습니다. 시스템 관리자는 이러한 데이터베이스를 다른 서버에 복원한 다음, Consul을 사용하여 새 데이터베이스에 대한 연결을 설정할 수 있습니다.
시작하기 전에 kubectl 명령줄 도구가 설치되어 있고 Kubernetes 클러스터에 대한 연결이 설정되어 있는지 확인하십시오.
ABBYY Vantage 설정에서 새 데이터베이스에 대한 연결을 설정하려면:
  1. 아래 명령을 실행하여 Consul 웹 인터페이스에 액세스합니다:
kubectl port-forward -n abbyy-infrastructure service/consul-ui 8500:80
그런 다음 http://localhost:8500/ui/dc1/kv/secret/로 이동합니다.
  1. 열린 Key/Value 탭에서 올바른 Vantage 환경을 선택합니다.
  2. platform 또는 vantage 프로젝트 중 하나와 데이터베이스를 사용하는 적절한 서비스(예: mail)를 선택합니다.
사용 가능한 서비스를 보여주는 Consul platform 서비스 목록
  1. 모든 서비스에 포함된 database 섹션으로 이동합니다.
Vantage 환경 선택을 보여주는 Consul Key/Value 탭
  1. SqlServer 섹션을 엽니다.
SqlServer 구성을 보여주는 Consul database 섹션
  1. connectionString 키에서:
    • Server의 이전 값을 새 서버 주소로 바꿉니다.
    • Database parameter에 새 데이터베이스를 지정합니다.
    • User IdPassword parameters에 로그인 자격 증명을 지정합니다.
Consul connectionString 값 편집기
  1. Save를 클릭합니다.
  2. 다음 명령을 실행하여 수정된 서비스를 다시 시작합니다:
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

아래 표에는 데이터베이스를 사용하는 모든 서비스와 각 서비스를 다시 시작할 때 사용하는 레이블이 나와 있습니다.

Platform Services

Consul 섹션 이름서비스 레이블비고
api-gateway-registryapi-gateway-registry
api-registryapi-registry
auth-adminapi2auth-adminapi2
auth-identityauth-identity
authauth-sts-identity, auth-adminapi2이 데이터베이스는 두 개의 서비스에서 사용됩니다.
blob-storageblob-storage
cron-servicecron-service
documentsetstoragedocumentsetstorage
mailmail
security-auditsecurity-audit
storagestorage데이터베이스 섹션은 fileMetadata 데이터 카탈로그에 저장됩니다
workflow-facadeworkflow-facade
workflow-schedulerworkflow-scheduler

Vantage 서비스

Consul 섹션 이름서비스 레이블
catalogstoragecatalogstorage
folderimportfolderimport
interactive-jobsinteractive-jobs
mailimportmailimport
permissionspermissions
publicapipublicapi
reportingreporting
secretstoragesecretstorage
skill-monitorskill-monitor
skillinfoskillinfo
subscriptionssubscriptions
tokenmanagementtokenmanagement
transactionstransactions
workspaceworkspace

GPU 설정

Vantage에서는 GPU를 사용하여 Deep Learning activity로 반정형 문서에서 데이터를 추출하는 스킬을 학습할 수 있습니다.

GPU 시스템 요구사항

  • 가상 GPU의 최소 RAM 용량: 12 GB
  • 호스트의 각 가상 GPU당 CPU 1개와 RAM 4 GB 필요 (예: 12 GB 용량의 단일 가상 GPU가 있는 VM은 최소 CPU 2개와 RAM 8 GB를 보유해야 함)

가상 GPU

가상 GPU(vGPU)를 사용하면 하나의 물리 GPU를 여러 가상 머신에서 사용할 수 있도록 나누어 Vantage 리소스를 보다 효율적으로 활용할 수 있습니다. vGPU를 설정하려면:
  1. nVidia 애플리케이션 허브에서 nVidia GRID 드라이버 패키지를 GPU가 포함된 가상 머신으로 복사한 후 다음 명령을 실행합니다:
apt-get update
apt-get install dkms
dpkg -i nvidia-linux-grid-535_535.54.03_amd64.deb
  1. 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
  1. 다음 플레이북을 실행하여 vGPU를 설정합니다.
ansible-playbook -i inventories/k8s -v playbooks/setup-gpu-node.yml

GPU 패스스루

가상 머신이 GPU에 직접 액세스할 수 있도록 GPU 패스스루를 설정할 수 있습니다. GPU 패스스루를 설정하려면:
  1. 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
  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
  1. 플레이북을 실행합니다:
ansible-playbook -i inventories/k8s -v playbooks/4-Kubernetes-k8s.yml
  1. GPU Operator Helm 차트를 설치합니다:
helm upgrade --install gpu-operator ansible/files/helm/charts/gpu-operator --create-namespace --debug -n gpu-operator
  1. 노드에 테인트를 추가합니다:
kubectl taint nodes worker2-12-a40-gpu01 nvidia.com/gpu:NoSchedule

GPU 테스트 및 배포

vGPU 모드와 GPU 패스스루 모드 모두에서 GPU Operator 설치를 테스트하려면:
  1. 다음 명령을 실행합니다.
kubectl apply -f filename
  1. 다음 내용을 포함한 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"
  1. 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를 배포하려면:
  1. 다음 Parameter를 env_specific.yml 파일에 추가합니다.
techcore:
  use_gpu_workers: true
  use_nn_extraction_training_workers: true
  1. 다음 중 하나를 수행합니다.
    • 이미 Vantage가 설치된 경우 GPU 워커를 배포하려면 다음 플레이북을 실행합니다.
ansible-playbook -i inventories/k8s -v playbooks/11-DeployWorkers-k8s.yml
  • 아직 Vantage가 설치되지 않은 경우, 설치 시 GPU 워커가 배포됩니다.

수동 검토 미활동 타임아웃 설정

수동 검토에서 열려 있는 작업에 대해 운영자가 15분 동안 아무런 작업도 수행하지 않으면 타임아웃이 발생합니다. 시스템 관리자는 Consul을 사용하여 타임아웃이 발생하기까지 필요한 미활동 시간의 길이를 변경할 수 있습니다. 타임아웃을 구성하려면:
  1. 다음을 실행하여 Consul 웹 인터페이스에 액세스합니다:
kubectl port-forward -n abbyy-infrastructure service/consul-ui 8500:80
그런 다음 http://localhost:8500/ui/dc1/kv/secret/로 이동합니다.
  1. Key/Value 탭을 사용하여 올바른 Vantage 환경을 선택합니다.
  2. 다음 키의 값을 변경합니다:
KeyDescription
secret/abbyy-vantage/vantage/verification/interactiveJobsOptions/popTimeout사용자가 비활성 상태가 된 후 작업이 대화형 작업 큐로 반환되기 전까지의 최소 시간입니다. 모든 대화형 동작(마우스 이동, 키보드 입력, 패치 처리 등)은 카운트다운을 재설정합니다. 기본값: 00:15:00(15분)
secret/abbyy-vantage/vantage/verification/interactiveJobsOptions/processingPopTimeout장기 실행 작업(스킬 적용, 페이지 넘기기 등)이 있는 경우, 사용자가 비활성 상태일 때 작업이 큐로 반환되기까지의 최소 시간입니다. 장기 실행 작업이 시작되면 이 값은 허용되는 최대 비활성 시간으로 설정됩니다. 작업이 완료되면 비활성 시간은 popTimeout 값으로 다시 설정됩니다. 기본값: 1.00:00:00(24시간)
  1. Save를 클릭합니다.
  2. 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 인증서 업데이트

SSL 인증서가 만료되면 새 인증서로 변경해야 합니다.

Lens 사용

  1. Config > Secrets로 이동하여 이름이 platform-wildcard인 모든 시크릿을 찾습니다.
  2. 각 시크릿에 대해 Data 하위 섹션에서 Show 아이콘을 클릭한 다음 값을 업데이트합니다.
    • 새 인증서 값을 tls.crt field에 입력합니다.
    • 해당 키 값을 tls.key field에 입력합니다.
인증서와 키는 base64 ASCII로 인코딩된 내용(PKCS#8)이 포함된 PEM 파일이어야 합니다. 인증서 파일은 -----BEGIN CERTIFICATE-----로, 키 파일은 -----BEGIN PRIVATE KEY-----로 시작해야 합니다.
  1. Save를 클릭합니다.

Linux 명령줄 사용

  1. Kubernetes 클러스터에 대한 액세스 권한이 있는지 확인합니다.
kubectl get nodes
  1. 인증서와 키를 PEM 형식으로 변환하여 현재 폴더에 저장합니다: cert.pem, key.pem.
필요한 경우 CRT 파일을 PEM 형식으로 변환합니다:
-----BEGIN CERTIFICATE-----
[사용자의 인증서]
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
[your key]
-----END PRIVATE KEY-----
  1. 다음 명령을 실행합니다:
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)