from clearml import PipelineController # --------------------------------------------------------- # 1. 인라인(Inline) 파이썬 함수 형태의 Step # (PipelineDecorator.component 대신 순수 함수로 작성 후 Controller에서 래핑) # --------------------------------------------------------- def generate_number() -> int: import random random.seed(None) num = random.randint(1, 10) print(f"Generated number: {num}") return num def evaluate_number(num: int) -> str: if num > 5: result = 'Max' else: result = 'Min' print(f"Input number {num} is '{result}'.") return result # --------------------------------------------------------- # 2. PipelineController를 이용한 파이프라인 뼈대 생성 # --------------------------------------------------------- pipe = PipelineController( name='Test Pipeline v1', project='My Pipeline Project11', version='1.1', repo='https://git.devcafe.kr/ClearML/task1.git', repo_branch='main', add_pipeline_tags=False ) # 기본 실행 큐 설정 pipe.set_default_execution_queue('default') # --------------------------------------------------------- # 3. Step 추가: 일반 함수(로컬 로직)와 외부 Git Task(원격 로직) 혼용 # --------------------------------------------------------- # Step 1: 위에서 정의한 파이썬 함수를 파이프라인 Step으로 추가 (Decorator 역할 대체) # pipe.add_function_step( # name='generate_step', # function=generate_number, # function_return=['number'], # ) # # Step 2: Step 1의 결과를 파라미터로 받는 또 다른 함수 Step # pipe.add_function_step( # name='evaluate_step', # function=evaluate_number, # # Step 1의 출력값(number)을 evaluate_number의 인자(num)로 전달 (템플릿 문법 사용) # function_kwargs={'num': '${generate_step.number}'}, # function_return=['size_label'], # parents=['generate_step'], # 의존성: generate_step이 끝나야 실행됨 # ) pipe.add_step( name='external_git_step', # parents=['evaluate_step'], # 여기에 위에서 만든 태스크의 위치를 지정합니다. base_task_project='Normal_Object_Detection', base_task_name='model-yolo26-human', # 파라미터는 똑같이 오버라이드 가능합니다. parameter_override={ 'Args/image_url': "https://acai.ketidev.kr:20443/detect/image/202606/20260619_145116_image.jpg" } ) # print(pipe.artifacts['final_result']) # --------------------------------------------------------- # 실행 부 # --------------------------------------------------------- if __name__ == '__main__': # 로컬에서 실행 테스트 # pipe.start_locally(run_pipeline_steps_locally=True) # 또는 원격 큐로 전송하여 파이프라인 전체를 원격 실행 pipe.start(queue='default')