HPC 클러스터 작업


11

우리 대학에는 HPC 컴퓨팅 클러스터가 있습니다. 클러스터를 사용하여 분류 자 ​​등을 교육합니다. 따라서 일반적으로 작업을 클러스터로 보내려면 (예 : python scikit-learn 스크립트)와 같은 명령을 포함하는 Bash 스크립트를 작성해야합니다 qsub script.py.

그러나 나는이 과정이 매우 실망 스럽다는 것을 안다. 일반적으로 노트북에 파이썬 스크립트를 작성한 다음 서버에 로그인하여 SVN 저장소를 업데이트하므로 동일한 파이썬 스크립트가 생성됩니다. 그런 다음 Bash 스크립트를 작성하거나 편집하여 bash 스크립트를 실행할 수 있습니다.

파이썬 스크립트의 모든 작은 업데이트에 대해 컴퓨팅 클러스터에서 실행하려면 많은 단계를 수행해야하기 때문에 이것이 실제로 실망 스럽습니다. 물론 서버에 데이터를 넣고 서버에서 데이터 세트의 경로를 사용해야 할 때 작업이 훨씬 복잡해집니다.

많은 사람들이 데이터 과학 작업에 컴퓨팅 클러스터를 사용하고 있다고 확신합니다. 작업을 클러스터로 전송하는 방법을 알고 싶습니까?


1
아, 배포의 기쁨 ... 분산 시스템의 기쁨으로 향상 :)
logc

답변:


5

그리드 관리자에게 로컬 시스템을 "호스트 제출"로 추가하고 SGE (실제로 사용하지 않는 것으로 가정)를 설치하면 qsub시스템에서 할 수 있습니다 .

또는....

emacs를 사용하면 emacs의 "트램프"ssh 연결 기능을 통해 HPC에서 편집하고 다른 emacs 창에 쉘을 열어 둘 수 있습니다. 어떤 편집기 / 운영 체제를 사용하고 싶은지 말하지 마십시오. 파일을 두 곳에 저장하도록 emacs를 구성 할 수도 있으므로 테스트를 실행하기 위해 로컬 시스템과 큰 작업을 위해 동시에 HPC 파일 시스템에 저장할 수 있습니다.


4

로컬 시스템에서 클러스터의 컴퓨팅 노드로 파일을 복사하는 부담을 덜어주는 많은 솔루션이 있습니다. 간단한 접근 방식은 clusterssh (cssh) 와 같이 클러스터 의 시스템에 다중 액세스 할 수있는 인터페이스를 사용하는 것 입니다. 터미널 화면 세트를 통해 한 번에 여러 시스템에 명령을 입력 할 수 있습니다 (각각 클러스터의 다른 시스템에 대한 ssh 연결).

클러스터가 qsub설정 되어있는 것처럼 보이므로 문제는 시스템을 따라 데이터 를 복제 하는 것과 관련이있을 수 있습니다 (각 노드에서 단순히 명령을 실행하는 것 제외). 따라서이 시점을 해결하기 위해 scp스크립트 를 작성하거나 클러스터의 각 노드에서 데이터를 복사하거나 (SVN으로 더 나은 주소 지정) NFS를 설정할 수 있습니다. 따라서 데이터에 간단하고 투명하게 액세스 할 수 있으며 불필요한 데이터 복제 필요성이 줄어 듭니다.

예를 들어, 네트워크 통신을 통해 노드에 액세스하여 데이터를 해당 위치로 복사 한 다음 원격으로 데이터를 사용할 수 있습니다 . NFS를 설정하는 방법에 대해서는 잘 모르지만 이미 액세스 권한이 있습니다 (홈 폴더가 액세스하는 시스템에서 동일 할 경우). 그런 다음 스크립트와 데이터를 한 곳으로 보내고 나중에 다른 곳에서 액세스 할 수 있습니다. 이것은 SVN 접근 방식과 유사하지만 더 투명하고 직설적입니다.


4

소스 버전 저장소를 사용하는 방법은 좋은 방법이며 실제로 클러스터에서 작업 한 다음 모든 것을 다시 복사 할 수도 있습니다.

랩톱에서 Python 스크립트를 약간 편집하고 클러스터의 SVN 디렉토리를 업데이트하는 경우 클러스터 프론트 엔드에서 직접 작동하지 않고 필요한 모든 작은 편집을 한 다음 하루가 끝나면 커밋하십시오. 거기에 모든 것이 있고 랩톱에서 업데이트됩니까?

당신이 필요로하는 것은 거기에있는 환경 (OS, 편집기 등)에 익숙해 지거나 자신의 환경을 설치하는 것입니다 (보통 홈 디렉토리에 Vim , Tmux 등 의 최신 버전을 적절한 도트 파일로 설치합니다. 집에요)

또한 데이터의 크기를 조정할 수 있으며 크기가 허용하는 경우 중간 결과까지도 지정할 수 있습니다. 저의 리포지토리에는 종종 코드, 데이터 (원본 및 정리 된 버전), 설명서 및 게시 용 종이 소스 (라텍스)가 포함됩니다.

마지막으로, 수동으로 스크립트를 수정하지 않도록 작업 제출을 스크립팅 할 수 있습니다. qsubstdin에서 스크립트를 승인하고 모든 #$주석을 명령 행 인수로 승인합니다 .


3

귀하의 질문에 따르면, 파이썬 스크립트와 Bash 스크립트라는 두 파일을 업데이트하는 로컬 컴퓨터와 원격 컴퓨터가 있다고 가정합니다. 두 파일 모두 SVN 제어하에 있으며 두 시스템 모두 동일한 SVN 서버에 액세스 할 수 있습니다.

그리드 시스템에 대한 조언은 없지만 죄송하지만 배포에 중요한 몇 가지 일반적인 사항을 알려 드리겠습니다.

프로덕션 변경 사항은 구성 변경 사항으로 만 제한하십시오 . "서버에서 데이터 세트의 경로를 사용"해야합니다. 파이썬 스크립트에 하드 코딩 된 경로가있는 것처럼 들립니다. 스크립트를 이동하는 다른 모든 시스템에서 해당 경로를 변경해야하기 때문에 이는 좋은 생각이 아닙니다. 이러한 변경 사항을 SVN으로 다시 커밋하면 로컬 컴퓨터에 원격 경로가 있고 on ... on (경로뿐만 아니라 암호가있는 경우 어떻게됩니까?) SVN에 프로덕션 암호가 없어야합니다 섬기는 사람.)

따라서 경로 및 기타 설정 정보를 .ini파일에 보관하고 ConfigParser 를 사용하여 .json파일 을 읽거나 파일을 사용하여 json 모듈을 사용하십시오 . SVN 제어없이 파일의 사본 하나를 로컬 및 원격으로 하나의 동일한 경로에 두십시오. 파이썬 스크립트에서 해당 구성 파일의 경로를 유지하십시오 (또는 둘 다 유지할 수없는 경우 명령 줄에서 가져 오십시오) 동일한 경로에서 구성).

구성을 가능한 작게 유지하십시오 . 모든 구성은 응용 프로그램의 "이동 부품"이며 모든 시스템은 이동 부품이 적을수록 더 강력합니다. 구성에 속하는 것을 나타내는 좋은 지표는 코드를 이동할 때마다 편집해야한다는 것입니다. 편집 할 필요가없는 것은 코드에서 상수로 유지 될 수 있습니다.

배포 자동화 . 로컬 시스템의 Bash 스크립트를 통해이를 수행 할 수 있습니다. 를 통해 원격 컴퓨터에서 모든 명령을 실행할 수 있습니다 ssh. 예를 들어 :

svn export yourprojectpath /tmp/exportedproject
tar czf /tmp/yourproject.tgz /tmp/exportedproject
scp /tmp/myproject.tgz youruser@remotemachine:~/dev

## Remote commands are in the right hand side, between ''
ssh youruser@remotemachine 'tar xzf ~/dev/yourproject.tgz'
ssh youruser@remotemachine 'qsub ~/dev/yourproject/script.py'

이것이 작동하려면 공개 / 개인 키를 기반으로 로컬 컴퓨터와 원격 컴퓨터 사이에 암호없이 로그인 해야합니다.

이보다 더 필요한 경우 Python의 Fabric 또는 고급 요리를 사용할 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.