다음을 통해 공유


컨테이너 설치 및 실행

이 콘텐츠의 적용 대상:확인 표시v3.0(GA)확인 표시v3.1(GA)

Azure AI 문서 인텔리전스는 컴퓨터 학습 기술을 사용하여 자동화된 데이터 처리 소프트웨어를 빌드할 수 있는 Azure AI 서비스입니다. 문서 인텔리전스를 사용하면 문서에서 텍스트, 키/값 쌍, 선택 표시, 테이블 데이터 등을 식별하고 추출할 수 있습니다. 결과는 원본 파일의 관계를 포함하는 구조화된 데이터로 전달됩니다. 컨테이너는 제공된 데이터만 처리하고 액세스가 허용된 리소스만 활용합니다. 컨테이너는 다른 지역의 데이터를 처리할 수 없습니다.

이 문서에서는 Document Intelligence 컨테이너를 다운로드, 설치 및 실행하는 방법을 알아볼 수 있습니다. 컨테이너를 사용하면 자체 환경에서 문서 인텔리전스 서비스를 실행할 수 있습니다. 컨테이너는 특정 보안 및 데이터 거버넌스 요구 사항에 적합합니다.

  • 읽기, 레이아웃, ID 문서, 영수증청구서 모델은 Document Intelligence v3.1 컨테이너에서 지원됩니다.

  • 읽기, 레이아웃, 일반 문서, 명함사용자 지정 모델은 Document Intelligence v3.0 컨테이너에서 지원됩니다.

버전 지원

컨테이너에 대한 지원은 현재 모든 모델의 경우 문서 인텔리전스 버전 v3.0: 2022-08-31 (GA)에서 제공되고 읽기, 레이아웃, ID 문서, 영수증 및 청구서 모델의 경우 v3.1 2023-07-31 (GA)에서 제공됩니다.

필수 조건

시작하려면 활성 Azure 계정이 필요합니다. 계정이 없는 경우 무료 계정에 만들 수 있습니다.

문서 인텔리전스 컨테이너를 사용하려면 다음 사항도 필요합니다.

Required 목적
Docker 사용 경험 기본 docker용어와 명령에 대한 지식뿐만 아니라 레지스트리, 리포지토리, 컨테이너 및 컨테이너 이미지와 같은 Docker 개념을 기본적으로 이해하고 있어야 합니다.
Docker Engine 설치됨
  • 호스트 컴퓨터에 설치된 Docker 엔진이 필요합니다. Docker는 macOS, WindowsLinux에서 Docker 환경을 구성하는 패키지를 제공합니다. Docker 및 컨테이너에 대한 기본 사항은 Docker 개요를 참조하세요.
  • Docker는 컨테이너에서 Azure에 연결하여 청구 데이터를 보낼 수 있도록 구성해야 합니다.
  • Windows에서 Docker가 Linux 컨테이너를 지원하도록 구성해야 합니다.
문서 인텔리전스 리소스 Azure Portal의 단일 서비스 Azure AI 문서 인텔리전스 또는 다중 서비스 리소스입니다. 컨테이너를 사용하려면 연결된 키와 엔드포인트 URI가 있어야 합니다. 두 값 모두 Azure Portal 문서 인텔리전스 키 및 엔드포인트 페이지에서 사용할 수 있습니다.
  • {FORM_RECOGNIZER_KEY}: 사용 가능한 두 개의 리소스 키 중 하나입니다.
  • {FORM_RECOGNIZER_ENDPOINT_URI}: 청구 정보를 추적하는 데 사용되는 리소스의 엔드포인트입니다.
선택 사항 목적
Azure CLI(명령줄 인터페이스) Azure CLI를 사용하면 온라인 명령 세트를 사용하여 Azure 리소스를 만들고 관리할 수 있습니다. Windows, macOS 및 Linux 환경에 설치할 수 있으며 Docker 컨테이너와 Azure Cloud Shell에서 실행할 수 있습니다.

호스트 컴퓨터 요구 사항

호스트는 Docker 컨테이너를 실행하는 x64 기반 컴퓨터입니다. 다음과 같이 Azure에서 컴퓨터 온-프레미스 또는 Docker 호스팅 서비스일 수 있습니다.

참고 항목

스튜디오 컨테이너는 Azure Kubernetes Service에서 배포하고 실행할 수 없습니다. 스튜디오 컨테이너는 로컬 컴퓨터에서만 실행할 수 있습니다.

컨테이너 요구 사항 및 추천

필수 지원 컨테이너

다음 표에는 다운로드하는 각 문서 인텔리전스 컨테이너에 대한 하나 이상의 지원 컨테이너가 나열되어 있습니다. 자세한 내용은 청구 섹션을 참조하세요.

기능 컨테이너 지원 컨테이너
읽음 필요하지 않음
레이아웃 필요하지 않음
명함 읽음
일반 문서 레이아웃
청구서 레이아웃
영수증 읽기 또는 레이아웃
ID 문서 읽음
사용자 지정 템플릿 레이아웃

참고 항목

최소 및 추천 값은 호스트 머신 리소스가 아니라 Docker 제한을 기반으로 합니다.

문서 인텔리전스 컨테이너
Container 최소 권장
Read 8개 코어, 10GB 메모리 8개 코어, 24GB 메모리
Layout 8개 코어, 16GB 메모리 8개 코어, 24GB 메모리
Business Card 8개 코어, 16GB 메모리 8개 코어, 24GB 메모리
General Document 8개 코어, 12GB 메모리 8개 코어, 24GB 메모리
ID Document 8개 코어, 8GB 메모리 8개 코어, 24GB 메모리
Invoice 8개 코어, 16GB 메모리 8개 코어, 24GB 메모리
Receipt 8개 코어, 11GB 메모리 8개 코어, 24GB 메모리
Custom Template 8개 코어, 16GB 메모리 8개 코어, 24GB 메모리
  • 각 코어는 속도가 2.6GHz 이상이어야 합니다.
  • docker compose 또는 docker run 명령의 일부로 사용되는 --cpus--memory 설정에 해당하는 코어 및 메모리

docker images 명령을 사용하여 다운로드한 컨테이너 이미지를 나열할 수 있습니다. 예를 들어 다음 명령은 다운로드한 각 컨테이너 이미지의 ID, 리포지토리 및 태그를 테이블 형식으로 나열합니다.

docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"

IMAGE ID         REPOSITORY                TAG
<image-id>       <repository-path/name>    <tag-name>

docker-compose up 명령으로 컨테이너 실행

  • {ENDPOINT_URI} 및 {API_KEY} 값을 Azure 리소스 페이지의 리소스 엔드포인트 URI 및 키로 바꿉니다.

    Azure Portal 키 및 엔드포인트 페이지 스크린샷.

  • EULA 값이 accept로 설정되어 있는지 확인합니다.

  • EULA, Billing, ApiKey 값을 지정해야 합니다. 지정하지 않으면 컨테이너가 시작되지 않습니다.

Important

키는 문서 인텔리전스 리소스에 액세스하는 데 사용됩니다. 키를 공유하지 마시고 예를 들어 Azure Key Vault를 사용하여 안전하게 저장합니다. 또한 이러한 키는 정기적으로 다시 생성하는 것이 좋습니다. API 호출을 수행하는 데는 키가 하나만 필요합니다. 첫 번째 키를 다시 생성하는 경우, 두 번째 키를 사용하여 서비스에 계속 액세스할 수 있습니다.

다음 코드 샘플은 문서 인텔리전스 레이아웃 컨테이너를 실행하기 위한 자체 포함된 docker compose 예입니다. docker compose에서 YAML 파일을 사용하여 애플리케이션의 서비스를 구성합니다. 그런 다음, docker-compose up 명령을 사용하여 구성에서 모든 서비스를 만들고 시작합니다. 레이아웃 컨테이너 인스턴스에 대한 {FORM_RECOGNIZER_ENDPOINT_URI} 및 {FORM_RECOGNIZER_KEY} 값을 입력합니다.

version: "3.9"
services:
  azure-form-recognizer-read:
    container_name: azure-form-recognizer-read
    image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/read-3.1
    environment:
      - EULA=accept
      - billing={FORM_RECOGNIZER_ENDPOINT_URI}
      - apiKey={FORM_RECOGNIZER_KEY}
    ports:
      - "5000:5000"
    networks:
      - ocrvnet
networks:
  ocrvnet:
    driver: bridge

이제 docker compose 명령어로 서비스를 시작할 수 있습니다.

docker-compose up

docker compose 파일 만들기

  1. 이 파일의 이름을 docker-compose.yml로 지정

  2. 다음 코드 샘플은 문서 인텔리전스 레이아웃, 스튜디오 및 사용자 지정 템플릿 컨테이너를 함께 실행하는 자체 포함된 docker compose 예입니다. docker compose에서 YAML 파일을 사용하여 애플리케이션의 서비스를 구성합니다. 그런 다음 docker-compose up 명령을 사용하여 구성에서 모든 서비스를 만들고 시작합니다.

version: '3.3'
services:
  nginx:
    image: nginx:alpine
    container_name: reverseproxy
    depends_on:
      - layout
      - custom-template
    volumes:
      - ${NGINX_CONF_FILE}:/etc/nginx/nginx.conf
    ports:
      - "5000:5000"
  layout:
    container_name: azure-cognitive-service-layout
    image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/layout-3.0:latest
    environment:
      eula: accept
      apikey: ${FORM_RECOGNIZER_KEY}
      billing: ${FORM_RECOGNIZER_ENDPOINT_URI}
      Logging:Console:LogLevel:Default: Information
      SharedRootFolder: /share
      Mounts:Shared: /share
      Mounts:Output: /logs
    volumes:
      - type: bind
        source: ${SHARED_MOUNT_PATH}
        target: /share
      - type: bind
        source: ${OUTPUT_MOUNT_PATH}
        target: /logs
    expose:
      - "5000"

  custom-template:
    container_name: azure-cognitive-service-custom-template
    image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/custom-template-3.0:latest
    restart: always
    depends_on:
      - layout
    environment:
      AzureCognitiveServiceLayoutHost: http://azure-cognitive-service-layout:5000
      eula: accept
      apikey: ${FORM_RECOGNIZER_KEY}
      billing: ${FORM_RECOGNIZER_ENDPOINT_URI}
      Logging:Console:LogLevel:Default: Information
      SharedRootFolder: /share
      Mounts:Shared: /share
      Mounts:Output: /logs
    volumes:
      - type: bind
        source: ${SHARED_MOUNT_PATH}
        target: /share
      - type: bind
        source: ${OUTPUT_MOUNT_PATH}
        target: /logs
    expose:
      - "5000"

  studio:
    container_name: form-recognizer-studio
    image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/studio:3.0
    environment:
      ONPREM_LOCALFILE_BASEPATH: /onprem_folder
      STORAGE_DATABASE_CONNECTION_STRING: /onprem_db/Application.db
    volumes:
      - type: bind
        source: ${FILE_MOUNT_PATH} # path to your local folder
        target: /onprem_folder
      - type: bind
        source: ${DB_MOUNT_PATH} # path to your local folder
        target: /onprem_db
    ports:
      - "5001:5001"
    user: "1000:1000" # echo $(id -u):$(id -g)

docker compose 파일 만들기

  1. 이 파일의 이름을 docker-compose.yml로 지정

  2. 다음 코드 샘플은 문서 인텔리전스 레이아웃, 스튜디오 및 사용자 지정 템플릿 컨테이너를 함께 실행하는 자체 포함된 docker compose 예입니다. docker compose에서 YAML 파일을 사용하여 애플리케이션의 서비스를 구성합니다. 그런 다음 docker-compose up 명령을 사용하여 구성에서 모든 서비스를 만들고 시작합니다.

version: '3.3'
services:
  nginx:
    image: nginx:alpine
    container_name: reverseproxy
    depends_on:
      - layout
      - custom-template
    volumes:
      - ${NGINX_CONF_FILE}:/etc/nginx/nginx.conf
    ports:
      - "5000:5000"
  layout:
    container_name: azure-cognitive-service-layout
    image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/layout-3.1:latest
    environment:
      eula: accept
      apikey: ${FORM_RECOGNIZER_KEY}
      billing: ${FORM_RECOGNIZER_ENDPOINT_URI}
      Logging:Console:LogLevel:Default: Information
      SharedRootFolder: /share
      Mounts:Shared: /share
      Mounts:Output: /logs
    volumes:
      - type: bind
        source: ${SHARED_MOUNT_PATH}
        target: /share
      - type: bind
        source: ${OUTPUT_MOUNT_PATH}
        target: /logs
    expose:
      - "5000"

  custom-template:
    container_name: azure-cognitive-service-custom-template
    image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/custom-template-3.1:latest
    restart: always
    depends_on:
      - layout
    environment:
      AzureCognitiveServiceLayoutHost: http://azure-cognitive-service-layout:5000
      eula: accept
      apikey: ${FORM_RECOGNIZER_KEY}
      billing: ${FORM_RECOGNIZER_ENDPOINT_URI}
      Logging:Console:LogLevel:Default: Information
      SharedRootFolder: /share
      Mounts:Shared: /share
      Mounts:Output: /logs
    volumes:
      - type: bind
        source: ${SHARED_MOUNT_PATH}
        target: /share
      - type: bind
        source: ${OUTPUT_MOUNT_PATH}
        target: /logs
    expose:
      - "5000"

  studio:
    container_name: form-recognizer-studio
    image: mcr.microsoft.com/azure-cognitive-services/form-recognizer/studio:3.1
    environment:
      ONPREM_LOCALFILE_BASEPATH: /onprem_folder
      STORAGE_DATABASE_CONNECTION_STRING: /onprem_db/Application.db
    volumes:
      - type: bind
        source: ${FILE_MOUNT_PATH} # path to your local folder
        target: /onprem_folder
      - type: bind
        source: ${DB_MOUNT_PATH} # path to your local folder
        target: /onprem_db
    ports:
      - "5001:5001"
    user: "1000:1000" # echo $(id -u):$(id -g)

사용자 지정 템플릿 컨테이너 및 레이아웃 컨테이너는 Azure Storage 큐 또는 메모리 큐에서 사용할 수 있습니다. Storage:ObjectStore:AzureBlob:ConnectionStringqueue:azure:connectionstring 환경 변수는 Azure Storage 큐를 사용하는 경우에만 설정하면 됩니다. 로컬로 실행하는 경우 이러한 변수를 삭제합니다.

서비스가 실행 중인지 확인합니다.

서비스가 가동되어 실행 중인지 확인합니다. Ubuntu 셸에서 이 명령을 실행합니다.

$cd <folder containing the docker-compose file>

$source .env

$docker-compose up

사용자 지정 템플릿 컨테이너에는 몇 가지 다른 구성이 필요하며 다른 선택적 구성을 지원합니다.

설정 필수 설명
EULA 라이선스 승인 예: Eula=accept
결제 FR 리소스의 청구 엔드포인트 URI
ApiKey FR 리소스의 엔드포인트 키
큐:Azure:연결 문자열 아니요 Azure 큐 연결 문자열
Storage:ObjectStore:AzureBlob:ConnectionString 아니요 Azure Blob 연결 문자열
HealthCheck:MemoryUpperboundInMB 아니요 비정상 상태를 활성 상태로 보고하기 위한 메모리 임계값입니다. 기본값: 권장 메모리와 동일
StorageTimeToLiveInMinutes 아니요 모든 중간 및 최종 파일을 제거하는 TTL 기간입니다. 기본값: 2일, TTL은 5분에서 7일 사이로 설정할 수 있습니다.
Task:MaxRunningTimeSpanInMinutes 아니요 요청을 시간 제한으로 처리하는 최대 실행 시간입니다. 기본값: 60분
HTTP_PROXY_BYPASS_URLS 아니요 프록시 무시를 위한 URL 지정 예: HTTP_PROXY_BYPASS_URLS = abc.com, xyz.com
AzureCognitiveServiceReadHost(영수증, IdDocument 컨테이너만 해당) 읽기 컨테이너 URI를 지정합니다. 예:AzureCognitiveServiceReadHost=http://onprem-frread:5000
AzureCognitiveServiceLayoutHost(문서, 청구서 컨테이너만 해당) 레이아웃 컨테이너 URI 지정 예:AzureCognitiveServiceLayoutHost=http://onprem-frlayout:5000

문서 인텔리전스 스튜디오를 사용하여 모델 학습

  • 동일한 형식의 양식을 5개 이상 수집합니다. 이 데이터를 사용하여 모델을 학습시키고 양식을 테스트합니다. 샘플 데이터 세트(sample_data.zip 다운로드 및 추출)를 사용할 수 있습니다.

  • 컨테이너가 실행 중인지 확인한 후 브라우저를 열고 컨테이너가 배포된 엔드포인트로 이동합니다. 이 배포가 로컬 컴퓨터인 경우 엔드포인트는 [http://localhost:5001](http://localhost:5001)입니다.

  • 사용자 지정 추출 모델 타일을 선택합니다.

  • Create project 옵션을 선택합니다.

  • 프로젝트 이름을 입력하고 선택적으로 설명을 입력합니다.

  • "리소스 구성" 단계에서 사용자 지정 템플릿 모델에 엔드포인트를 제공합니다. 로컬 컴퓨터에 컨테이너를 배포한 경우 이 URL [http://localhost:5000](http://localhost:5000)을 사용합니다.

  • 학습 데이터가 파일 폴더 내에 있는 하위 폴더를 제공합니다.

  • 마지막으로 프로젝트를 만듭니다.

이제 프로젝트가 만들어져 레이블을 지정할 준비가 되었습니다. 학습 데이터를 업로드하고 레이블 지정을 시작합니다. 레이블 지정이 처음이라면 사용자 지정 모델 빌드 및 학습을 참조하세요.

API를 사용하여 학습

API를 직접 호출하여 모델을 학습시키려는 경우 사용자 지정 템플릿 모델 학습 API에는 레이블 지정 프로젝트의 콘텐츠인 base64로 인코딩된 Zip 파일이 필요합니다. PDF나 이미지 파일은 생략하고 JSON 파일만 제출해도 됩니다.

데이터 세트에 레이블이 지정되고 *.ocr.json, *.labels.json 및 fields.json 파일이 zip에 추가되면 PowerShell 명령을 사용하여 base64로 인코딩된 문자열을 생성합니다.

$bytes = [System.IO.File]::ReadAllBytes("<your_zip_file>.zip")
$b64String = [System.Convert]::ToBase64String($bytes, [System.Base64FormattingOptions]::None)

빌드 모델 API를 사용하여 요청을 게시합니다.


  POST http://localhost:5000/formrecognizer/documentModels:build?api-version=2023-07-31

  {
      "modelId": "mymodel",
      "description": "test model",
      "buildMode": "template",

      "base64Source": "<Your base64 encoded string>",
      "tags": {
         "additionalProp1": "string",
         "additionalProp2": "string",
         "additionalProp3": "string"
       }
  }

서비스가 실행 중인지 확인합니다.

컨테이너가 실행되고 있는지 확인하는 방법에는 여러 가지가 있습니다.

  • 컨테이너는 \에서 컨테이너가 실행 중인지 시각적으로 확인할 수 있는 홈페이지를 제공합니다.

  • 즐겨 찾는 웹 브라우저를 열고 확인하려는 컨테이너의 외부 IP 주소와 노출된 포트로 이동하면 됩니다. 나열된 요청 URL을 사용하여 컨테이너가 실행 중인지 유효성을 검사합니다. 나열된 예제 요청 URL은 http://localhost:5000이지만 특정 컨테이너는 달라질 수 있습니다. 컨테이너의 외부 IP 주소와 노출된 포트로 이동해야 합니다.

    요청 URL 목적
    http://localhost:5000/ 컨테이너는 홈페이지를 제공합니다.
    http://localhost:5000/ready GET으로 요청된 이 요청을 통해 컨테이너가 모델에 대한 쿼리를 수락할 준비가 되었는지 확인할 수 있습니다. 이 요청은 Kubernetes 활동성 및 준비 상태 프로브에 사용될 수 있습니다.
    http://localhost:5000/status GET으로 요청된 이 요청은 컨테이너를 시작하는 데 사용된 API 키가 엔드포인트 쿼리를 발생시키지 않고 유효한지 확인합니다. 이 요청은 Kubernetes 활동성 및 준비 상태 프로브에 사용될 수 있습니다.
    http://localhost:5000/swagger 컨테이너는 엔드포인트에 대한 전체 설명서 세트와 사용해 보기 기능을 제공합니다. 이 기능을 사용하면 웹 기반 HTML 양식으로 설정을 입력할 수 있고 코드 작성 없이 쿼리를 만들 수 있습니다. 쿼리가 반환되면 필요한 HTTP 헤더 및 본문 형식을 보여 주는 예제 CURL 명령이 제공됩니다.

Azure 컨테이너 시작 페이지 스크린샷.

컨테이너 중지

컨테이너를 중지하려면 다음 명령을 사용합니다.

docker-compose down

결제

문서 인텔리전스 컨테이너는 Azure 계정의 문서 인텔리전스 리소스를 사용하여 Azure에 청구 정보를 보냅니다.

컨테이너에 대한 쿼리는 API Key에 사용되는 Azure 리소스의 가격 책정 계층으로 청구됩니다. 문서와 이미지를 처리하는 데 사용된 각 컨테이너 인스턴스에 대해 요금이 계산됩니다.

다음 오류가 표시되는 경우: 컨테이너가 유효한 상태가 아닙니다. 상태 'OutOfQuota' API 키가 할당량을 벗어났기 때문에 구독 유효성 검사가 실패했습니다. 이는 컨테이너가 청구 엔드포인트와 통신하지 않는다는 표시입니다.

Azure에 연결

컨테이너에는 실행할 청구 인수 값이 필요합니다. 이러한 값을 통해 컨테이너는 청구 엔드포인트에 연결할 수 있습니다. 컨테이너는 약 10 ~ 15분마다 사용량을 보고합니다. 컨테이너가 허용되는 시간 내에서 Azure에 연결되지 않으면 컨테이너는 계속 실행되지만 청구 엔드포인트가 복원될 때까지 쿼리를 처리하지 않습니다. 10 ~ 15분 간격으로 동시에 10회 동안 연결이 시도됩니다. 10회 시도 안에 청구 엔드포인트에 연결할 수 없는 경우 컨테이너는 요청 처리를 중지합니다. 청구를 위해 Microsoft로 전송되는 정보의 예는 Azure AI 컨테이너 FAQ를 참조하세요.

청구 인수

다음 세 가지 옵션 모두에 유효한 값이 제공되면 docker-compose up 명령이 컨테이너를 시작합니다.

옵션 설명
ApiKey 청구 정보를 추적하는 데 사용되는 Azure AI 서비스 리소스의 키입니다.
이 옵션의 값은 Billing에 지정된 프로비저닝된 리소스에 대한 API 키로 설정해야 합니다.
Billing 청구 정보를 추적하는 데 사용되는 Azure AI 서비스 리소스의 엔드포인트입니다.
이 옵션의 값은 프로비저닝된 Azure 리소스의 엔드포인트 URI로 설정해야 합니다.
Eula 컨테이너에 대한 라이선스에 동의했음을 나타냅니다.
이 옵션의 값은 동의로 설정해야 합니다.

이러한 옵션에 대한 자세한 내용은 컨테이너 구성을 참조하세요.

요약

이번 내용은 여기까지입니다! 이 문서에서는 문서 인텔리전스 컨테이너 다운로드, 설치 및 실행에 대한 개념과 워크플로를 알아보았습니다. 요약:

  • 문서 인텔리전스는 Docker용 Linux 컨테이너 7개를 제공합니다.
  • 컨테이너 이미지는 mcr에서 다운로드합니다.
  • 컨테이너 이미지는 Docker에서 실행됩니다.
  • 컨테이너를 인스턴스화할 때 청구 정보를 지정해야 합니다.

Important

Azure AI 컨테이너는 측정을 위해 Azure에 연결하지 않고 실행할 수 있는 라이선스가 부여되지 않습니다. 고객은 컨테이너에서 항상 계량 서비스와 청구 정보를 통신할 수 있도록 설정해야 합니다. Azure AI 컨테이너는 고객 데이터(예: 분석 중인 이미지 또는 텍스트)를 Microsoft에 보내지 않습니다.

다음 단계