LLM 기반 애플리케이션 DevOps와 프롬프트 흐름 통합

이 문서에서는 Azure Machine Learning에서 LLM 기반 애플리케이션 DevOps와 프롬프트 흐름의 통합에 대해 알아봅니다. 프롬프트 흐름은 전체 LLM 기반 애플리케이션 개발 워크플로를 사용하여 흐름 개발 및 반복을 위한 개발자 친화적이고 사용하기 쉬운 코드 우선 환경을 제공합니다.

프롬프트 흐름 SDK 및 CLI, VS Code 확장, 흐름 폴더 탐색기의 새 UI를 제공하여 흐름의 로컬 개발, 흐름 실행 및 평가 실행의 로컬 트리거, 로컬에서 클라우드로 흐름 전환(Azure Machine Learning 작업 영역) 환경을 용이하게 합니다.

이 설명서는 프롬프트 흐름 코드 환경 및 DevOps의 기능을 효과적으로 결합하여 LLM 기반 애플리케이션 개발 워크플로를 향상시키는 방법에 초점을 맞춥니다.

Diagram of the showing the following flow: create flow, develop and test flow, versioning in code repo, submit runs to cloud, and debut and iteration.

프롬프트 흐름의 코드 우선 환경 소개

LLM을 사용하여 애플리케이션을 개발할 때는 코드 리포지토리 및 CI/CD 파이프라인을 포함하는 표준화된 애플리케이션 엔지니어링 프로세스를 준비하는 것이 일반적입니다. 이 통합을 통해 팀 구성원 간의 간소화된 개발 프로세스, 버전 제어 및 공동 작업을 수행할 수 있습니다.

코드 개발 경험이 있고 보다 효율적인 LLMOps 반복 프로세스를 원하는 개발자에게는 다음과 같은 주요 기능과 이점을 통해 프롬프트 흐름 코드 경험을 얻을 수 있습니다.

  • 코드 리포지토리의 흐름 버전 관리. 폴더 구조에서 참조된 소스 파일과 정렬된 상태를 유지할 수 있는 YAML 형식으로 플로우를 정의할 수 있습니다.
  • CI/CD 파이프라인과 흐름 실행을 통합합니다. CI/CD 파이프라인 및 배달 프로세스에 원활하게 통합될 수 있는 프롬프트 흐름 CLI 또는 SDK를 사용하여 흐름 실행을 트리거할 수 있습니다.
  • 로컬에서 클라우드로 원활하게 전환합니다. 버전 제어, 로컬 개발 및 공유를 위해 흐름 폴더를 로컬 또는 코드 리포지토리로 쉽게 내보낼 수 있습니다. 마찬가지로 클라우드 리소스에서 추가 작성, 테스트, 배포를 위해 흐름 폴더를 클라우드로 쉽게 다시 가져올 수 있습니다.

프롬프트 흐름 코드 정의에 액세스

각 프롬프트 흐름은 코드 폴더 구조에서 흐름을 정의하기 위한 필수 파일이 포함된 흐름 폴더 구조와 연결됩니다. 이 폴더 구조는 흐름을 정리하여 보다 원활한 전환을 가능하게 합니다.

Azure Machine Learning은 모든 작업 영역 사용자를 위한 공유 파일 시스템을 제공합니다. 흐름을 만들면 해당 흐름 폴더가 자동으로 생성되고 Users/<username>/promptflow 디렉터리에 저장됩니다.

Screenshot of standard flow creation showing the create a new flow.

흐름 폴더 구조

흐름 폴더 구조 및 포함된 키 파일 개요:

  • flow.dag.yaml: YAML 형식의 이 기본 흐름 정의 파일에는 흐름에 사용되는 입력, 출력, 노드, 도구 및 변형에 대한 정보가 포함됩니다. 프롬프트 흐름을 작성하고 정의하는 데 필수적입니다.
  • 소스 코드 파일(.py, .jinja2): 흐름 폴더에는 흐름의 도구/노드에서 참조하는 사용자 관리 소스 코드 파일도 포함됩니다.
    • Python(.py) 형식의 파일은 사용자 지정 python 논리를 정의하기 위해 python 도구에서 참조할 수 있습니다.
    • 프롬프트 컨텍스트를 정의하기 위해 프롬프트 도구 또는 LLM 도구에서 Jinja 2(.jinja2) 형식의 파일을 참조할 수 있습니다.
  • 원본이 아닌 파일: 흐름 폴더에는 유틸리티 파일 및 원본 파일에 포함할 수 있는 데이터 파일과 같은 원본이 아닌 파일도 포함될 수 있습니다.

흐름이 만들어지면 흐름 작성 페이지로 이동하여 올바른 파일 탐색기에서 흐름 파일을 보고 작동할 수 있습니다. 이렇게 하면 파일을 보고, 편집하고, 관리할 수 있습니다. 파일에 대한 모든 수정 사항은 파일 공유 스토리지에 직접 반영됩니다.

Screenshot of standard flow highlighting the files explorer.

"원시 파일 모드"를 켜면 흐름 정의 파일flow.dag.yaml 및 원본 파일을 포함하여 파일 편집기에서 파일의 원시 콘텐츠를 보고 편집할 수 있습니다.

Screenshot of raw file mode on a standard flow.

Screenshot of flow source file in a standard flow.

또는 Azure Machine Learning Notebook 내에서 직접 모든 흐름 폴더에 액세스할 수 있습니다.

Screenshot of notebooks in Azure Machine Learning in the prompt flow folder showing the files.

코드 리포지토리의 프롬프트 흐름 버전 관리

흐름을 코드 리포지토리로 체크 인하면 흐름 작성 페이지에서 로컬 시스템으로 흐름 폴더를 쉽게 내보낼 수 있습니다. 이렇게 하면 탐색기에서 로컬 컴퓨터로 모든 파일이 포함된 패키지를 다운로드한 다음 코드 리포지토리에 체크 인할 수 있습니다.

Screenshot of showing the download button in the file explorer.

Azure Machine Learning과 DevOps 통합에 대한 자세한 내용은 Azure Machine Learning의 Git 통합을 참조 하세요.

로컬 리포지토리에서 클라우드로 실행 제출

필수 조건

  • 아직 Azure Machine Learning 작업 영역이 없다면 시작하려면 리소스 만들기를 완료합니다.

  • Azure Machine Learning Python SDK v2를 설치한 Python 환경 - 지침 설치. 이 환경은 Azure Machine Learning 리소스를 정의하고 제어하기 위한 환경이며 런타임에 사용되는 환경과 별개입니다. 자세한 내용은 프롬프트 흐름 엔지니어링을 위해 런타임 관리 방법을 참조하세요.

프롬프트 흐름 SDK 설치

pip install -r ../../examples/requirements.txt

Azure Machine Learning 작업 영역에 연결

az login

클라우드에서 이 흐름 실행에 대한 구성을 정의하도록 run.yml을 준비합니다.

$schema: https://azuremlschemas.azureedge.net/promptflow/latest/Run.schema.json
flow: <path_to_flow>
data: <path_to_flow>/data.jsonl

column_mapping:
  url: ${data.url}

# define cloud resource
# if omitted, it will use the automatic runtime, you can also specify the runtime name, specify automatic will also use the automatic runtime.
runtime: <runtime_name> 


# define instance type only work for automatic runtime, will be ignored if you specify the runtime name.
# resources:
#   instance_type: <instance_type>

# overrides connections 
connections:
  classify_with_llm:
    connection: <connection_name>
    deployment_name: <deployment_name>
  summarize_text_content:
    connection: <connection_name>
    deployment_name: <deployment_name>

흐름의 각 도구에 대한 연결 및 배포 이름을 지정할 수 있습니다. 연결 및 배포 이름을 지정하지 않으면 flow.dag.yaml 파일에서 하나의 연결 및 배포를 사용합니다. 연결 형식을 지정하려면 다음을 수행합니다.

...
connections:
  <node_name>:
    connection: <connection_name>
      deployment_name: <deployment_name>
...

pfazure run create --file run.yml

클라우드에서 이 평가 흐름 실행에 대한 구성을 정의하도록 run_evaluation.yml을 준비합니다.

$schema: https://azuremlschemas.azureedge.net/promptflow/latest/Run.schema.json
flow: <path_to_flow>
data: <path_to_flow>/data.jsonl
run: <id of web-classification flow run>
column_mapping:
  groundtruth: ${data.answer}
  prediction: ${run.outputs.category}

# define cloud resource
# if omitted, it will use the automatic runtime, you can also specify the runtime name, specif automatic will also use the automatic runtime.
runtime: <runtime_name> 


# define instance type only work for automatic runtime, will be ignored if you specify the runtime name.
# resources:
#   instance_type: <instance_type>

# overrides connections 
connections:
  classify_with_llm:
    connection: <connection_name>
    deployment_name: <deployment_name>
  summarize_text_content:
    connection: <connection_name>
    deployment_name: <deployment_name>

pfazure run create --file run_evaluation.yml

Azure Machine Learning 작업 영역에서 실행 결과 보기

클라우드로 흐름 실행을 제출하면 실행의 포털 URL이 반환됩니다. 포털에서 실행 결과를 URI 보기로 열 수 있습니다.

다음 명령을 사용하여 실행에 대한 결과를 볼 수도 있습니다.

로그 스트리밍

pfazure run stream --name <run_name>

실행 출력 보기

pfazure run show-details --name <run_name>

평가 실행 메트릭 보기

pfazure run show-metrics --name <evaluation_run_name>

Important

자세한 내용은 Azure에 대한 프롬프트 흐름 CLI 설명서를 참조할 수 있습니다.

미세 조정에서의 반복 개발

로컬 개발 및 테스트

반복 개발 중에 흐름 또는 프롬프트를 구체화하고 미세 조정할 때는 코드 리포지토리 내에서 로컬로 여러 반복을 수행하는 것이 도움이 될 수 있습니다. Azure 바인딩 없이 순수 로컬 개발 및 테스트를 용이하게 하기 위해 커뮤니티 버전, 프롬프트 흐름 VS Code 확장프롬프트 흐름 로컬 SDK 및 CLI가 제공됩니다.

프롬프트 흐름 VS Code 확장

프롬프트 흐름 VS Code 확장이 설치되면 VS Code 편집기에서 로컬로 흐름을 쉽게 작성하여 클라우드와 비슷한 UI 환경을 제공할 수 있습니다.

확장 사용을 사용하려면 다음을 수행합니다.

  1. VS Code Desktop에서 프롬프트 흐름 폴더를 엽니다.
  2. Notebook 보기에서 ```flow.dag.yaml`` 파일을 엽니다.
  3. 시각적 개체 편집기를 사용하여 변형의 프롬프트를 조정하거나 도구를 더 추가하는 등 흐름에 필요한 변경사항을 적용할 수 있습니다.
  4. 흐름을 테스트하려면 시각적 개체 편집기의 맨 위에 있는 흐름 실행 단추를 선택합니다. 이렇게 하면 흐름 테스트가 트리거됩니다.

Screenshot of VS Code showing running the flow in the visual editor.

프롬프트 흐름 로컬 SDK 및 CLI

Jupyter, PyCharm, Visual Studio 또는 기타 IDE를 사용하려는 경우 flow.dag.yaml 파일에서 YAML 정의를 직접 수정할 수 있습니다.

Screenshot of a yaml file in VS Code highlighting the default input and flow directory.

그런 다음 프롬프트 흐름 CLI 또는 SDK를 사용하여 테스트를 위해 흐름 단일 실행을 트리거할 수 있습니다.

작업 디렉터리 <path-to-the-sample-repo>/examples/flows/standard/에 있다고 가정

pf flow test --flow web-classification  # "web-classification" is the directory name

Screenshot of the flow test output in PowerShell.

이렇게 하면 매번 주 코드 리포지토리를 업데이트하지 않고도 변경 내용을 신속하게 만들고 테스트할 수 있습니다. 로컬 테스트 결과에 만족하면 로컬 리포지토리에서 클라우드로 실행을 전송하여 클라우드에서 실험 실행을 수행할 수 있습니다.

로컬 버전 사용에 대한 자세한 내용 및 지침은 프롬프트 흐름 GitHub 커뮤니티를 참조할 수 있습니다.

연속 개발을 위해 스튜디오 UI로 돌아가기

또는 클라우드 리소스 및 환경을 사용하여 흐름 작성 페이지에서 흐름을 변경하는 스튜디오 UI로 돌아갈 수 있는 옵션이 있습니다.

최신 버전의 흐름 파일을 계속 개발하고 사용하려면 Notebook의 터미널에 액세스하고 리포지토리에서 흐름 파일의 최신 변경 내용을 끌어올 수 있습니다.

또한 스튜디오 UI에서 계속 작업하려는 경우 로컬 흐름 폴더를 새 초안 흐름으로 직접 가져올 수 있습니다. 이를 통해 로컬 개발과 클라우드 개발 간에 원활하게 전환할 수 있습니다.

Screenshot of the create a new flow panel with upload to local highlighted.

CI/CD 통합

CI: CI 파이프라인에서 흐름 실행 트리거

흐름을 성공적으로 개발 및 테스트하고 초기 버전으로 체크 인하면 다음 튜닝 및 테스트 반복이 준비됩니다. 이 단계에서는 프롬프트 흐름 CLI를 사용하여 일괄 처리 테스트 및 평가 실행을 포함하는 흐름 실행을 트리거할 수 있습니다. 이는 CI(연속 통합) 파이프라인에서 자동화된 워크플로 역할을 할 수 있습니다.

흐름 반복의 수명 주기 동안 여러 작업을 자동화할 수 있습니다.

  • 끌어오기 요청 후 프롬프트 흐름 실행
  • 프롬프트 흐름 평가를 실행하여 결과가 고품질인지 확인
  • 프롬프트 흐름 모델 등록
  • 프롬프트 흐름 모델 배포

웹 분류 흐름을 실행하는 엔드투엔드 MLOps 파이프라인에 대한 포괄적인 가이드는 프롬프트 흐름 및 GitHub를 사용하여 엔드투엔드 LLMOps 설정GitHub 데모 프로젝트를 참조하세요.

CD(지속적인 배포)

프로덕션으로 이동하는 마지막 단계는 Azure Machine Learning에서 흐름을 온라인 엔드포인트로 배포하는 것입니다. 이렇게 하면 흐름을 애플리케이션에 통합하고 사용할 수 있도록 할 수 있습니다.

흐름을 배포하는 방법에 대한 자세한 내용은 CLI 및 SDK를 사용하여 실시간 유추를 위한 Azure Machine Learning 관리형 온라인 엔드포인트에 흐름 배포를 참조하세요.

프로덕션 환경에서 흐름 개발에 대한 공동 작업

프롬프트 흐름을 사용하여 LLM 기반 애플리케이션을 개발하는 컨텍스트에서 팀 구성원 간의 공동 작업이 필요한 경우가 많습니다. 팀 구성원은 동일한 흐름 작성 및 테스트에 참여하여 흐름의 다양한 패싯을 작업하거나 반복적인 변경 및 향상된 기능을 동시에 만들 수 있습니다.

이러한 공동 작업을 위해서는 코드를 공유하고, 수정 내용을 추적하고, 버전을 관리하고, 이러한 변경 내용을 최종 프로젝트에 통합하는 효율적이고 간소화된 접근 방식이 필요합니다.

프롬프트 흐름의 코드 환경의 일부로 프롬프트 흐름 SDK/CLIVisual Studio Code 확장을 도입하면 코드 리포지토리 내에서 흐름 개발에 대한 공동 작업이 쉬워집니다. 변경 내용 추적, 버전 관리 및 이러한 수정 사항을 최종 프로젝트에 통합하기 위해 GitHub 또는 Azure DevOps와 같은 클라우드 기반 코드 리포지토리를 활용하는 것이 좋습니다.

공동 개발 모범 사례

  1. 흐름을 로컬로 작성 및 단일 테스트 - 코드 리포지토리 및 VSC 확장

    • 이 공동 작업 프로세스의 첫 번째 단계는 프롬프트 흐름 코드를 포함하는 프로젝트 코드에 대한 기준으로 코드 리포지토리를 사용하는 것입니다.
      • 이 중앙 집중식 리포지토리를 사용하면 효율적인 조직, 모든 코드 변경 내용 추적 및 팀 구성원 간의 공동 작업을 수행할 수 있습니다.
    • 리포지토리가 설정되면 팀 구성원은 흐름의 로컬 작성 및 단일 입력 테스트에 VSC 확장을 사용할 수 있습니다.
      • 이 표준화된 통합 개발 환경은 흐름의 다양한 측면에서 작업하는 여러 구성원 간의 공동 작업을 촉진합니다. Screenshot of local development.
  2. 클라우드 기반 실험적 일괄 테스트 및 평가 - 프롬프트 흐름 CLI/SDK 및 작업 영역 포털 UI

    • 로컬 개발 및 테스트 단계에 따라 흐름 개발자는 pfazure CLI 또는 SDK를 사용하여 로컬 흐름 파일에서 클라우드로 일괄 처리 실행 및 평가 실행을 제출할 수 있습니다.
      • 이 작업은 클라우드 리소스를 사용하는 방법을 제공하며, Azure Machine Learning 작업 영역의 포털 UI를 사용하여 결과를 영구적으로 저장하고 효율적으로 관리할 수 있습니다. 이 단계에서는 컴퓨팅 및 스토리지를 비롯한 클라우드 리소스 사용과 배포를 위한 추가 엔드포인트를 허용합니다. Screenshot of pfazure command to submit run to cloud.
    • 클라우드에 제출을 게시하면 팀 구성원이 클라우드 포털 UI에 액세스하여 결과를 보고 실험을 효율적으로 관리할 수 있습니다.
      • 이 클라우드 작업 영역은 모든 실행 기록, 로그, 스냅샷, 인스턴스 수준 입력 및 출력을 포함한 포괄적인 결과를 수집하고 관리하기 위한 중앙 집중식 위치를 제공합니다. Screenshot of cloud run snapshot.
      • 개발 중에 모든 실행 기록을 기록하는 실행 목록에서 팀 구성원은 다양한 실행의 결과를 쉽게 비교하여 품질 분석 및 필요한 조정에 활용할 수 있습니다. Screenshot of run list in workspace. Screenshot of run comparison in workspace.
  3. 프로덕션을 위한 로컬 반복 개발 또는 1단계 UI 배포

    • 실험을 분석한 후 팀 구성원은 다른 개발 및 미세 조정을 위해 코드 리포지토리로 돌아갈 수 있습니다. 그런 다음 후속 실행을 반복 방식으로 클라우드에 제출할 수 있습니다.
      • 이 반복적인 접근 방식은 팀이 프로덕션 준비가 완료된 품질에 만족할 때까지 지속적으로 개선할 수 있도록 보장합니다.
    • 팀이 흐름의 품질에 대해 완전히 확신하면 UI 마법사를 통해 Azure Machine Learning의 온라인 엔드포인트로 원활하게 배포할 수 있습니다. 팀이 흐름의 품질에 대해 완전히 확신하면 강력한 클라우드 환경에서 온라인 엔드포인트로 UI 배포 마법사를 통해 프로덕션으로 원활하게 전환할 수 있습니다.
      • 온라인 엔드포인트에 배포하면 실행 스냅샷을 기반으로 안정적이고 안전한 서비스, 추가 리소스 할당 및 사용량 추적, 클라우드에서의 로그 모니터링이 가능합니다. Screenshot of deploying flow from a run snapshot. Screenshot of deploy wizard.

공동 개발을 위해 코드 리포지토리를 사용하는 것이 좋은 이유

반복 개발의 경우 로컬 개발 환경과 Git과 같은 버전 제어 시스템을 조합하는 것이 일반적으로 더 효과적입니다. 코드를 수정하고 로컬에서 테스트한 다음 Git에 변경 내용을 커밋할 수 있습니다. 이렇게 하면 변경 내용에 대한 지속적인 레코드가 생성되고 필요한 경우 이전 버전으로 되돌릴 수 있습니다.

여러 환경에서 흐름을 공유해야 하는 경우 GitHub 또는 Azure Repos와 같은 클라우드 기반 코드 리포지토리를 사용하는 것이 좋습니다. 이렇게 하면 모든 위치에서 최신 버전의 코드에 액세스할 수 있으며 공동 작업 및 코드 관리를 위한 도구를 제공할 수 있습니다.

이 모범 사례에 따라 팀은 프롬프트 흐름 개발을 위한 원활하고 효율적이며 생산적인 공동 작업 환경을 만들 수 있습니다.

다음 단계