갤럭시 분산으로 작업 수행(실기 편)

8937 단어 Galaxy
다음은 어제의 보도입니다. 저는 실천편을 통해 SLURM 집단을 사용하는 작업 분산 집행 환경을 구축하고 싶습니다.
SLURM는 리눅스 환경에서 실행되는 소스 오픈 임무 스케줄러로 크로스바 등 대형 계산 노드 집단에 광범위하게 사용된다.갤럭시는 작업 수행 플러그인(Job Runner)으로 SLURM을 지원하며, SLURM 클러스터의 계산 노드를 도구로 사용할 수 있습니다.
갤럭시+SLURM 서버 구성
갤럭시와 SLURM의 클러스터링을 구축하려면 다음 기능을 단일 또는 여러 서버에 할당해야 합니다.
  • 갤럭시(웹 서버, 데이터베이스)
  • SLURM 클러스터 컨트롤러
  • SLURM 클러스터 컴퓨팅 노드
  • 공유 파일 시스템
  • 이번 구축례에서는 SLURM 컴퓨팅 노드를 위한 서버 2대를 준비하고 다른 1대에 갤럭시와 SLURM 컨트롤러를 설치했다.또한 공유 파일 시스템은 NFS를 사용하여 갤럭시+SLURM 컨트롤러 측면의 디스크 영역을 각 계산 노드에서 NFS를 설치하고 이용한다.
    파일 시스템 공유 준비
    먼저 갤럭시+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 에는 다음 두 개의 설정 파일이 필요합니다.
  • slurm.conf
  • munge.key
  • 클러스터를 구성하는 모든 서버에서 이러한 파일을 공유하기 위해 NFC에서 내보낸 경로c2의 바로 아래에 배치합니다.
    갤럭시 서버는 시작할 때 생성된/export/etc/munge/munge.key가 있어야 하기 때문에 이를 공유 파일 시스템에 복사한다.
    cp /etc/munge/munge.key /etc/slurm-llnl/slurm.conf /export
    
    다음은 /etc/slurm-llnl/slurm.conf의 내용을 편집합니다.중요한 것은 말미의 두 줄이다.
  • 노드 호스트 이름 목록
  • CPU, RealMemory(단위: MB): 계산 노드의 기계 규격과 일치하는 값
  • /export/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 컴퓨팅 노드에도 마찬가지로 설치하는 것을 잊지 마십시오.

    좋은 웹페이지 즐겨찾기