메인 콘텐츠로 이동
ActivePapers 데이터를 재계산 가능한 문서로 저장하여, 모든 게시 결과물을 다시 실행하고 검증하며 보존하세요.

이 사이트의 일부 링크는 제휴 링크입니다. 해당 링크를 통해 구매하실 경우 추가 비용 없이 소정의 수수료를 받을 수 있으나, 이는 추천 내용에 영향을 주지 않습니다. 자세한 내용은 제휴 공개 정책을 확인하세요. 제휴 마케팅 공개.

재계산 가능한 데이터 저장

재계산 가능한 데이터 저장하기 작성자: 콘라드 힌센 (Konrad Hinsen), 게시일: 2014 년 1 월 3 일 ActivePapers 를 소개할 때 자주 받는 질문이 있습니다.”왜 계산 결과를 저장해야 하죠? 코드만 보관해 두면 다시 실행하면 되잖아요. 저장해야 할 것은 코드와 입력 데이터뿐 아닙니까?”이에 대한 짧은 답변은”이론적으로는 맞지만, 실제 상황에서는 그렇지 않을 수 있다”는 것입니다. 긴 답변을 알고 싶다면 계속 읽어보세요. 또한 ActivePapers 가 재계산 가능한 데이터를 저장할 때와 저장하지 않을 때 각각 어떻게 도움을 줄 수 있는지 알게 될 것입니다. 먼저, 재계산 가능한 데이터를 저장해야 하는 가장 명백한 이유부터 짚고 넘어가겠습니다. 바로 계산 비용이 너무 커서 반복적으로 실행하기 어려운 경우입니다. 이는 (재) 계산 시간과 디스크 저장 공간 사용 사이의 전형적인 절충 문제입니다. 많은 경우 새로운 아이디어가 떠올랐을 때 신속하게 분석할 수 있도록 결과 데이터를 일정 기간 보관하되, 장기 아카이빙까지는 하지 않는 것이 좋은 타협책이 됩니다. 다음으로, 덜 очевид하지만 우리가 상기시키고 싶어 하지 않는 이유가 있습니다. 바로 계산이 생각만큼 재현 가능하지 않을 수 있다는 점입니다. 실행 플랫폼 (운영체제, 컴파일러 버전 등) 에 따라 미묘하게 다른 결과를 내놓는 프로그램은 실제로 꽤 흔합니다. 부동소수점 연산을 사용하는 프로그램은 거의 필연적으로 이 범주에 속합니다. 특히 프로그램의 두 번 실행 결과가 너무 달라서 그로부터 도출된 결론 자체가 바뀌는 경우에는 상황이 심각해집니다. 네, 이런 일이 실제로 발생합니다 . 마지막으로, 계산의 출력 데이터 자체를 저장하는 것은 중요하지 않지만 관련 메타데이터를 저장하는 것이 중요한 매우 흔한 상황이 있습니다. 바로 이때 ActivePapers 가 진가를 발휘합니다. 이러한 상황은 재계산 가능한 출력이 실제 전체 워크플로우에서 중간 데이터일 때 발생합니다. 예를 들어, 시뮬레이션을 실행하여 긴 궤적 (trajectory) 데이터를 생성한 후, 해당 궤적을 분석하고 그 결과로 플롯을 생성한다고 가정해 봅시다. 플롯이 최종 결과물이므로 이를 보관하고 싶을 것입니다. 반면 궤적 데이터와 원시 분석 결과는 중간 결과물이므로, 앞서 설명한 두 가지 경우에 해당하지 않는 한 별도로 저장할 필요가 없습니다. 하지만 플롯이 원시 분석 결과에서 생성되었고, 그 원시 분석 결과가 다시 시뮬레이션 궤적에서 비롯되었다는 사실은 반드시 기록해 두어야 합니다. 이러한 정보가 있으면 나중에 본인이나 다른 사람이 작업을 검토할 때 플롯이 실제로 시뮬레이션 및 분석 코드의 최신 버전과 일치하는지 쉽게 확인할 수 있습니다. ActivePapers 는 이러한 상황을 처리하기 위해”더미 데이터셋 (dummy datasets)“을 제공합니다. 더미 데이터셋에는 실제 데이터는 포함되지 않지만, 코드릿 (codelets) 실행 중에 ActivePapers 가 생성하는 모든 메타데이터는 포함됩니다. 현재 ActivePapers 상태에서는 이러한 더미 데이터셋을 생성하는 유일한 방법은 먼저 실제 데이터셋을 생성한 다음, 이를 입력으로 사용하는 모든 calclet 을 실행하고, 마지막으로 aptool dummy … 명령어를 사용하여 실제 데이터셋을 더미 데이터셋으로 대체하는 것입니다. 튜토리얼에서도 더미 데이터셋을 언급하며 원래 데이터를 어떻게 재계산하는지 보여줍니다. 더미 데이터셋 관련 사용자 인터페이스는 향후 개선될 여지가 많습니다. 예를 들어, 데이터셋을 생성하는 calclet 이 해당 데이터셋을 즉시 더미로 표시하도록 하여 파일에 전혀 기록되지 않고 메모리상에서만 클라이언트 calclet 으로 전달되도록 할 수 있습니다. 이에 대한 아이디어가 있다면 Github 이슈 트래커 에서 이슈를 등록해 주시기 바랍니다. 댓글 제공: Disqus


브라우저에서 코딩하여 Python을 배우세요

브라우저에서 직접 코딩하는 대화형 Python 및 데이터 과학 과정