갤럭시 분산으로 작업 수행(실기 편)
8937 단어 Galaxy
SLURM는 리눅스 환경에서 실행되는 소스 오픈 임무 스케줄러로 크로스바 등 대형 계산 노드 집단에 광범위하게 사용된다.갤럭시는 작업 수행 플러그인(Job Runner)으로 SLURM을 지원하며, SLURM 클러스터의 계산 노드를 도구로 사용할 수 있습니다.
갤럭시+SLURM 서버 구성
갤럭시와 SLURM의 클러스터링을 구축하려면 다음 기능을 단일 또는 여러 서버에 할당해야 합니다.
파일 시스템 공유 준비
먼저 갤럭시+SLURM 컨트롤러가 설치된 서버에서 NFC 서버를 시작합니다.
NFC 설치 및 설정에 대한 자세한 설명은 생략하고 NFC 서버 측면의
/export
디렉토리/etc/exports
파일을 내보내고 공유하려면 다음과 같이 하십시오./etc/exports
/export a.b.c.d/z(rw,sync,no_subtree_check,fsid=0,no_root_squash)
참고)a.b.c.d/z
에서는 내보낸 파일 시스템에 액세스할 수 있는 네트워크를 적절하게 설정해야 합니다.(e.g. 192.168.1.0/24
)각 SLURM 계산 노드에서 공유 파일 시스템을 로컬 디렉토리
/export
에 마운트합니다.다음 명령은 갤럭시 서버의 IP 주소가
192.168.1.100
일 때의 예입니다.mount -t nfs 192.168.1.100:/export /export
Docker를 통해 갤럭시 서버 시작갤럭시 프로젝트 개발자 중 한 명Björn Grüning은 갤럭시 Docker 컨테이너 이미지를 공개했다.이미지에 SLURM 컨트롤러 기능이 포함되어 있으므로 이 기능은 이번에 사용됩니다.
갤럭시+SLURM 컨트롤러를 실행하는 서버에서 다음과 같이 Docker 컨테이너를 시작합니다.
docker run -d --net host --hostname galaxy --name galaxy \
-v /export:/export \
-e "NONUSE=nodejs,proftp,reports,slurmctld,slurmd,condor" \
bgruening/galaxy-stable:17.05
SLURM 컨트롤러는 이후 수동으로 설정(갤럭시 가동 후)되므로 여기NONUSE
옵션을 사용하여 지정slurmctld, slurmd
합니다.기타 시작 옵션에 관해서는 GiitHubbgruening/docker-galaxy-stable 창고에 매우 세밀한 문서가 있습니다.
Docker를 통한 SLURM 노드 시작
위의 갤럭시 서버용 Docker 컨테이너와 함께 사용할 수 있는 SLURM 컴퓨팅 노드용 컨테이너로서 bgruening/docker-galaxy-stable에서 제공하는 Docker file(컨테이너 구축용 스크립트)가 있습니다.
이 용기 이미지
docker build
를 준비했습니다.SLURM 계산 노드를 실행하는 각 서버에서 다음과 같이 Docker 컨테이너를 시작합니다.
# SLURMノード #1
docker run -d --net host --hostname c1 --name slurm1 -v /export:/export galaxy-slurm
# SLURMノード #2
docker run -d --net host --hostname c2 --name slurm2 -v /export:/export galaxy-slurm
SLURM 클러스터 설정호스트 이름 해결
SLURM 클러스터를 사용하는 경우 각 서버는 IP 주소가 아닌 호스트 이름으로 액세스해야 합니다.내부용 DNS 서비스를 시작하는 방법도 있지만 클러스터를 구성하는 노드 수가 적으면
galaxy-slurm
에 기술할 수 있습니다.위에서 설명한 각 컨테이너 내
/etc/hosts
에는 /etc/hosts
, galaxy
, c1
의 호스트 이름에 해당하는 IP 주소가 기술되어 있습니다.(실제 IP 주소는 구축 환경에 따라 다릅니다.)/etc/hosts
172.17.0.2 galaxy
172.17.0.3 c1
172.17.0.4 c2
SLURM 설정 파일을 공유 파일 시스템에 구성SLURM 에는 다음 두 개의 설정 파일이 필요합니다.
c2
의 바로 아래에 배치합니다.갤럭시 서버는 시작할 때 생성된
/export
과/etc/munge/munge.key
가 있어야 하기 때문에 이를 공유 파일 시스템에 복사한다.cp /etc/munge/munge.key /etc/slurm-llnl/slurm.conf /export
다음은 /etc/slurm-llnl/slurm.conf
의 내용을 편집합니다.중요한 것은 말미의 두 줄이다. :
:
NodeName=c[1-2] CPUs=4 RealMemory=8192 State=UNKNOWN
PartitionName=debug Nodes=c[1-2] Default=YES MaxTime=INFINITE State=UP Shared=YES
SLURM 디렉터 데몬 다시 시작갤럭시 서버에서 SLURM 컨트롤러
slurm.conf
를 다시 시작합니다.공유 파일 시스템의 설정 파일을 읽으라고 지시합니다
slurmctld
.# GalaxyサーバのDockerコンテナに接続
docker run -ti galaxy bash
# galaxy コンテナ内で実行
pkill slurmctld && pkill munged
munged --key-file=/export/munge.key -f
slurmctld -L /home/galaxy/logs/slurmctld.log -f /export/slurm.conf
SLURM 노드 데몬 다시 시작SLURM 노드 측면은 기본적으로 읽기
/export/slurm.conf
로 설정되므로 관련 데몬을 다시 시작합니다.각 SLURM 노드에서 다음 명령을 실행합니다.# SLURMノードのDockerコンテナに接続
docker run -ti slurm1 bash
# slurm1,2 コンテナ内で実行
supervisorctl restart munge
supervisorctl restart slurmd
SLURM 클러스터를 구성하는 서버의 Docker 컨테이너/export/slurm.conf
에서 명령을 실행한 결과 sinfo
=STATE
의 2개 노드가 표시되면 OK.sinfo의 실행 결과
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
debug* up infinite 2 idle c[1-2]
갤럭시 작업 실행 플러그인 구성마지막으로 갤럭시는 SLURM 클러스터를 임무 수행 목적지로 설정했다.
구체적으로 갤럭시는 작업 수행 플러그인(Job Runner)으로 사용
idle
설정이다.SlurmJobRunner
Docker 컨테이너를 사용하는 경우bgruening/galaxy-stable
는 다음과 같습니다.(파일 시스템을 공유하는 PATH가 아님)/etc/galaxy/job_conf.xml
<?xml version="1.0"?>
<job_conf>
<plugins workers="2">
<plugin id="slurm" type="runner" load="galaxy.jobs.runners.slurm:SlurmJobRunner">
<param id="drmaa_library_path">/usr/lib/slurm-drmaa/lib/libdrmaa.so</param>
</plugin>
<plugin id="local" type="runner" load="galaxy.jobs.runners.local:LocalJobRunner" workers="2"/>
</plugins>
<handlers default="handlers">
<handler id="handler0" tags="handlers"/>
<handler id="handler1" tags="handlers"/>
</handlers>
<destinations default="slurm_cluster">
<destination id="slurm_cluster" runner="slurm">
<param id="nativeSpecification">-p work -n 4</param>
<param id="embed_metadata_in_job">False</param>
<env file="/export/galaxy-central/.venv/bin/activate" />
</destination>
<destination id="local" runner="local"/>
</destinations>
<tools>
<tool id="upload1" destination="local"/>
</tools>
<limits>
</limits>
</job_conf>
파일 업로드 도구(upload 1)에 대해서는 SLURM을 사용하지 않고 로컬 서버에서 실행(Local JobRunner 사용)한 것으로 기록됩니다.지금까지 갤럭시 분산 작업 환경이었습니다!
해석 등에 사용되는 도구를 실제로 설치할 때는 갤럭시 서버뿐만 아니라 SLURM 컴퓨팅 노드에도 마찬가지로 설치하는 것을 잊지 마십시오.
Reference
이 문제에 관하여(갤럭시 분산으로 작업 수행(실기 편)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nasunom/items/ca1e29e6e6df6baeef73텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)