기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
대기열 환경에서 백그라운드 데몬 프로세스 실행
많은 렌더링 사용 사례에서 애플리케이션 및 장면 데이터를 로드하는 데 상당한 시간이 걸릴 수 있습니다. 작업이 모든 프레임에 대해 다시 로드하는 경우 대부분의 시간을 오버헤드에 소비합니다. 애플리케이션을 백그라운드 데몬 프로세스로 한 번 로드하고 장면 데이터를 로드한 다음 프로세스 간 통신(IPC)을 통해 명령을 전송하여 렌더링을 수행할 수 있는 경우가 많습니다.
많은 오픈 소스 Deadline Cloud 통합이이 패턴을 사용합니다. Open Job Description 프로젝트는 지원되는 모든 운영 체제에서 강력한 IPC 패턴을 갖춘 어댑터 런타임 라이브러리
이 패턴을 보여주기 위해 Python 및 bash 코드를 사용하여 백그라운드 데몬을 구현하고 작업과 통신할 IPC를 구현하는 독립형 샘플 작업 번들
사전 조건
다음 단계를 수행하여 Deadline Cloud samples github 리포지토리에서 데몬 프로세스로 샘플 작업 번들
-
대기열 및 연결된 Linux 플릿이 있는 Deadline Cloud 팜이 없는 경우 Deadline Cloud 콘솔의 안내 온보딩 환경에 따라 기본 설정으로 Deadline Cloud
팜을 생성합니다. -
워크스테이션에 Deadline Cloud CLI 및 Deadline Cloud 모니터가 없는 경우 사용 설명서의 Deadline Cloud 제출자 설정의 단계를 따르세요.
-
git를 사용하여 Deadline Cloud 샘플 GitHub 리포지토리를 복제합니다. git clone https://github.com/aws-deadline/deadline-cloud-samples.gitCloning into 'deadline-cloud-samples'... ...cd deadline-cloud-samples/job_bundles
데몬 샘플 실행
-
Deadline Cloud CLI를 사용하여
job_env_daemon_process샘플을 제출합니다.git clone https://github.com/aws-deadline/deadline-cloud-samples.gitCloning into 'deadline-cloud-samples'... ...cd deadline-cloud-samples/job_bundles -
Deadline Cloud Monitor 애플리케이션에서는 새 작업이 표시되고 진행 상황을 모니터링할 수 있습니다. 대기열과 연결된 Linux플릿에 작업의 작업을 실행할 수 있는 작업자가 있으면 약 1분 후에 완료됩니다. 작업 중 하나를 선택한 상태에서 작업 패널의 오른쪽 상단 메뉴에서 로그 보기 옵션을 선택합니다.
오른쪽에는 DaemonProcess 시작과 Task 실행이라는 두 가지 세션 작업이 있습니다. 창 중앙의 로그 뷰어는 오른쪽에서 선택한 세션 작업에 해당합니다.
모든 작업에 대한 로그 보기 옵션을 선택합니다. 타임라인에는 세션의 일부로 실행된 나머지 작업과 환경을 종료한
Shut down DaemonProcess작업이 표시됩니다.
데몬 로그 보기
-
이 섹션에서는 Deadline Cloud 모니터를 사용하여 세션 작업을 작업 템플릿에 정의된 위치와 비교합니다. 이전 섹션에서 계속됩니다.
텍스트 편집기에서 job_env_daemon_process/template.yaml
파일을 엽니다. 세션 작업을 작업 템플릿에 정의된 위치와 비교합니다. -
Deadline Cloud Monitor에서
Launch DaemonProcess세션 작업을 선택합니다. 다음과 같이 로그 출력이 표시됩니다.2024/07/17 16:27:20-07:00 2024/07/17 16:27:20-07:00 ============================================== 2024/07/17 16:27:20-07:00 --------- Entering Environment: DaemonProcess 2024/07/17 16:27:20-07:00 ============================================== 2024/07/17 16:27:20-07:00 ---------------------------------------------- 2024/07/17 16:27:20-07:00 Phase: Setup 2024/07/17 16:27:20-07:00 ---------------------------------------------- 2024/07/17 16:27:20-07:00 Writing embedded files for Environment to disk. 2024/07/17 16:27:20-07:00 Mapping: Env.File.Enter -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/enter-daemon-process-env.sh 2024/07/17 16:27:20-07:00 Mapping: Env.File.Exit -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/exit-daemon-process-env.sh 2024/07/17 16:27:20-07:00 Mapping: Env.File.DaemonScript -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/daemon-script.py 2024/07/17 16:27:20-07:00 Mapping: Env.File.DaemonHelperFunctions -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/daemon-helper-functions.sh 2024/07/17 16:27:20-07:00 Wrote: Enter -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/enter-daemon-process-env.sh 2024/07/17 16:27:20-07:00 Wrote: Exit -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/exit-daemon-process-env.sh 2024/07/17 16:27:20-07:00 Wrote: DaemonScript -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/daemon-script.py 2024/07/17 16:27:20-07:00 Wrote: DaemonHelperFunctions -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/daemon-helper-functions.sh 2024/07/17 16:27:20-07:00 ---------------------------------------------- 2024/07/17 16:27:20-07:00 Phase: Running action 2024/07/17 16:27:20-07:00 ---------------------------------------------- 2024/07/17 16:27:20-07:00 Running command sudo -u job-user -i setsid -w /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/tmp_u8slys3.sh 2024/07/17 16:27:20-07:00 Command started as pid: 2187 2024/07/17 16:27:20-07:00 Output: 2024/07/17 16:27:21-07:00 openjd_env: DAEMON_LOG=/sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/daemon.log 2024/07/17 16:27:21-07:00 openjd_env: DAEMON_PID=2223 2024/07/17 16:27:21-07:00 openjd_env: DAEMON_BASH_HELPER_SCRIPT=/sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/daemon-helper-functions.sh작업 템플릿의 다음 줄이이 작업을 지정했습니다.
stepEnvironments: - name: DaemonProcess description: Runs a daemon process for the step's tasks to share. script: actions: onEnter: command: bash args: - "{{Env.File.Enter}}" onExit: command: bash args: - "{{Env.File.Exit}}" embeddedFiles: - name: Enter filename: enter-daemon-process-env.sh type: TEXT data: | #!/bin/env bash set -euo pipefail DAEMON_LOG='{{Session.WorkingDirectory}}/daemon.log' echo "openjd_env: DAEMON_LOG=$DAEMON_LOG" nohup python {{Env.File.DaemonScript}} > $DAEMON_LOG 2>&1 & echo "openjd_env: DAEMON_PID=$!" echo "openjd_env: DAEMON_BASH_HELPER_SCRIPT={{Env.File.DaemonHelperFunctions}}" echo 0 > 'daemon_log_cursor.txt' ... -
Deadline Cloud Monitor에서 작업 실행: N 세션 작업 중 하나를 선택합니다. 다음과 같이 로그 출력이 표시됩니다.
2024/07/17 16:27:22-07:00 2024/07/17 16:27:22-07:00 ============================================== 2024/07/17 16:27:22-07:00 --------- Running Task 2024/07/17 16:27:22-07:00 ============================================== 2024/07/17 16:27:22-07:00 Parameter values: 2024/07/17 16:27:22-07:00 Frame(INT) = 2 2024/07/17 16:27:22-07:00 ---------------------------------------------- 2024/07/17 16:27:22-07:00 Phase: Setup 2024/07/17 16:27:22-07:00 ---------------------------------------------- 2024/07/17 16:27:22-07:00 Writing embedded files for Task to disk. 2024/07/17 16:27:22-07:00 Mapping: Task.File.Run -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/run-task.sh 2024/07/17 16:27:22-07:00 Wrote: Run -> /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/embedded_fileswy00x5ra/run-task.sh 2024/07/17 16:27:22-07:00 ---------------------------------------------- 2024/07/17 16:27:22-07:00 Phase: Running action 2024/07/17 16:27:22-07:00 ---------------------------------------------- 2024/07/17 16:27:22-07:00 Running command sudo -u job-user -i setsid -w /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/tmpv4obfkhn.sh 2024/07/17 16:27:22-07:00 Command started as pid: 2301 2024/07/17 16:27:22-07:00 Output: 2024/07/17 16:27:23-07:00 Daemon PID is 2223 2024/07/17 16:27:23-07:00 Daemon log file is /sessions/session-972e21d98dde45e59c7153bd9258a64dohwg4yg1/daemon.log 2024/07/17 16:27:23-07:00 2024/07/17 16:27:23-07:00 === Previous output from daemon 2024/07/17 16:27:23-07:00 === 2024/07/17 16:27:23-07:00 2024/07/17 16:27:23-07:00 Sending command to daemon 2024/07/17 16:27:23-07:00 Received task result: 2024/07/17 16:27:23-07:00 { 2024/07/17 16:27:23-07:00 "result": "SUCCESS", 2024/07/17 16:27:23-07:00 "processedTaskCount": 1, 2024/07/17 16:27:23-07:00 "randomValue": 0.2578537967668988, 2024/07/17 16:27:23-07:00 "failureRate": 0.1 2024/07/17 16:27:23-07:00 } 2024/07/17 16:27:23-07:00 2024/07/17 16:27:23-07:00 === Daemon log from running the task 2024/07/17 16:27:23-07:00 Loading the task details file 2024/07/17 16:27:23-07:00 Received task details: 2024/07/17 16:27:23-07:00 { 2024/07/17 16:27:23-07:00 "pid": 2329, 2024/07/17 16:27:23-07:00 "frame": 2 2024/07/17 16:27:23-07:00 } 2024/07/17 16:27:23-07:00 Processing frame number 2 2024/07/17 16:27:23-07:00 Writing result 2024/07/17 16:27:23-07:00 Waiting until a USR1 signal is sent... 2024/07/17 16:27:23-07:00 === 2024/07/17 16:27:23-07:00 2024/07/17 16:27:23-07:00 ---------------------------------------------- 2024/07/17 16:27:23-07:00 Uploading output files to Job Attachments 2024/07/17 16:27:23-07:00 ----------------------------------------------작업 템플릿의 다음 줄은이 작업을 지정한 것입니다. ``` 단계:
steps: - name: EnvWithDaemonProcess parameterSpace: taskParameterDefinitions: - name: Frame type: INT range: "{{Param.Frames}}" stepEnvironments: ... script: actions: onRun: timeout: 60 command: bash args: - '{{Task.File.Run}}' embeddedFiles: - name: Run filename: run-task.sh type: TEXT data: | # This bash script sends a task to the background daemon process, # then waits for it to respond with the output result. set -euo pipefail source "$DAEMON_BASH_HELPER_SCRIPT" echo "Daemon PID is $DAEMON_PID" echo "Daemon log file is $DAEMON_LOG" print_daemon_log "Previous output from daemon" send_task_to_daemon "{\"pid\": $$, \"frame\": {{Task.Param.Frame}} }" wait_for_daemon_task_result echo Received task result: echo "$TASK_RESULT" | jq . print_daemon_log "Daemon log from running the task" hostRequirements: attributes: - name: attr.worker.os.family anyOf: - linux