2017-04-11 8 views
0

Luigi 또는 다른 Workflow 자동화 제품군과 같은 것을 사용하고 싶습니다. 내 문제는 내가 알 수없는 입력 번호를 노드가 있다는 것입니다. 예를 들어 Luigi는 입력 내용을 미리 하드 코딩해야합니다.작업의 입력 수가 알려지지 않은 워크 플로우 자동화 작업이란 무엇입니까?

는이 전 노드가 작업을 나타내는 그래프가 있고 선이 다른 모든 작업

A 
/\ 
| B 
\/
    C 
우리가에서 시작하지만 B, C로 흘러

의 입력에 출력에서 ​​아래로 흘러 점 가정 해 봅시다 C는 A의 출력을 받아들입니다.

나는 SciLuigi와 같은 일을 발견했지만 정확하게 문제를 해결하지 못합니다.

+0

[루이지의 동적 종속성] (http://luigi.readthedocs.io/en/stable/tasks.html#dynamic- dependencies) (여기에 [예제] (https://github.com/)가 있습니다. spotify/luigi/blob/master/examples/dynamic_requirements.py)). 그 외에도 문제를 해결하기 위해 Luigi 작업을 어떻게 작성했는지 조금 더 설명해야합니다. – matagus

+0

나는 그 예를 보았지만 나의 문제 상황에도 잘 맞지 않는다. 개별 작업의 경우 임의의 수의 입력을 사용할 수 있지만 다른 작업 또는 수를 모를 수 있습니다. 모든 것이 중요합니다. 지금까지 필자는 SciLuigi 및 다른 프레임 워크로 어떤 것이 효과가 있는지 알아 보았습니다. 그들 중 어느 누구도 루이지의 사용 용이성과 일치하지 않습니다. 팩토리에서 생성 된 특별한 태스크를위한 서브 클래스를 만드는 것을 보았습니다. 특별한'run()'메소드는 대신 동작을 수행 할 것입니다. 잘 모르겠다면 ... –

답변

0

답변이 필요한 질문은 다음과 같습니다. C가 언제 실행해야하는지 어떻게 알 수 있습니까? A와 B는 언제 달릴 지 어떻게 알 수 있습니까? 이것이 Luigi 과제의 requires 방법으로 들어가는 것입니다. Luigi 모델은 각 일괄 작업이 의존하는 작업의 완료에 따라 실행할시기를 결정하는 끌어 당기는 모델입니다. 당신이 보여 단순한 모델에서

(그것은 C에 "아래로 흐르는"A 또는 B 생각하는 데 도움이되지 않음), C는 파이프 라인의 발사 작업입니다. C이로드되고 (run은 호출하지 않음) AB이 완료되었는지 확인하십시오. 둘 중 하나라도 완료되지 않으면 서브 세트가 실행될 것입니다. 이미 완료되었거나 완료되면 Crun으로 전화 할 것입니다. A 작업과 B 작업 만 조건부로 수행해야하는 경우 수행 할 작업이없는 경우 해당 complete 메서드는 True을 반환 할 수 있습니다. Crun이 될 수 있습니다.

그러나이 문제가 귀하의 특별한 문제인지 확신 할 수 없습니다. 아마도 CAC에 대해 한 번 실행하여 B에 대해 한 번만 실행하려고 할 것입니다. 이런 종류의 시나리오에서 나는 대체로 run 메서드를 C으로 작성하여 디렉토리의 파일, 상태 데이터베이스의 행 또는 다른 참조 목록에 상관없이 임의의 입력 목록에 대해 작업 할 수 있습니다. 그러나 이런 경우에는 C에 의해 제공되는 후 처리 단계를 추가하는 Task의 하위 클래스를 정의하여및 B에 대한 정의에 C이 무엇이든지 추가하는 것이 더 나을 때가 있습니다.

어떤 경우라도 파이프 라인을 실행하는 데는 여러 가지 방법이 있지만 설명하는 추상화 수준에서 좋은 대안을 제안하는 것은 어렵습니다. 나는 당신의 생각을 풀 모델로 바꾸는 것이 아마도 그것들을 찾는 첫 걸음이라고 생각합니다.

+0

첫 번째 두 단락에서 설명하는 것은 내가 계속 진행하고 있다고 생각하는 것입니다. 제 상황은 A, B, C가 무엇인지, 언제 달려야 하는지를 알고 있다는 것입니다. 나는 사람들이 빨리 바꿀 수있는 기계 학습 모델을 실행하기 위해 이것을 사용하고 싶다. 따라서 사용자가 A, B 및 C로 표시되는 데이터의 변형을 원하지만 하이퍼 매개 변수 만 변경한다고 알고 있다고 가정 해 봅시다. 아마도 A에서 C로 또 다른 B 데이터 변환을 추가해야 할 것입니다 (그래서 우리는 다이아몬드 모양의 그래프를 얻습니다). 이상적으로는 알려진 코드 모듈과 그 관계를 설명하는 JSON/YML 파일을 작성하여 실행하도록하는 것이 이상적입니다. –

+0

내 진짜 문제는 A, B, C 중 어느 누구도 자신이 의존하는 시간을 미리 알지 못하기 때문에 설명하는 것처럼 워크 플로 자동화를 끌어 와서 나에게 도움이되지 않는다는 것입니다. –

+0

어떤 종류의 기계 학습 모델입니까? 'Sklearn.pipeline.Pipeline'과 같은 것? 루이지의 개념은 json/yml에서 파이프 라인을 만들려고하면 프로그래밍 언어로 사용하려고 할 때 지나치게 복잡해진다는 사실에서 진화했다고 생각합니다. 슬라이드 23-26을 참고하십시오. https://www.slideshare.net/erikbern/luigi-presentation-nyc-data-science – MattMcKnight