開發與維運

阿里雲AGS使用最佳實踐 – Remote API與專有集群混部

實際測序任務中,您可能期望使用阿里雲AGS Remote Api來實現Mapping流程,而獲取Bam數據後續的Call操作期望在自己集群實現,本方案將討論如何使遠程的API調用和專有集群中的後續流程結合使用。

系統原理:

整個測序流程通過一個本地AGS工作流完成:工作流中嵌入一個或多個task,並調用Remote Api完成Fastq的Mapping流程;獲取Bam文件後,本地工作流來完成後續測序任務。

流程解讀:

image.png

上述系統包括幾個部分:

用戶IDC環境:包括測序儀系統、本地數據緩存、操作機;

用戶的阿里雲基因集群:用戶在ACK中申請的K8S專有集群;

阿里雲RemoteApi系統:通過API提供Mapping服務;

阿里雲OSS服務:用於保存用戶源數據、中間Bam數據、最終的vcf數據;

操作流程:

  1. 用戶IDC環境內,基因數據下線暫存;
  2. 用戶通過數據傳輸工具(Ossutil)將待處理的fastq數據上傳到阿里雲OSS存儲服務(用戶賬號下的OSS);
  3. 用戶通過AGS命令行工具,像用戶的專有集群提交測序服務;
  4. 測序工作流的task1:向阿里雲AGS服務提交RemoteApi請求,執行fastq數據的Mapping服務,task1等待mapping服務完成後再執行後面的任務;
  5. AGS Mapping服務會下載fastq數據,對比完成後會將bam數據上傳到oss;
  6. 用戶工作流完成剩餘的任務,下載bam文件、執行call變異、上傳最終數據等;

環境準備:

  1. AGS命令行下載地址:

詳見:https://help.aliyun.com/document_detail/148762.html

  1. OSS數據授權:

詳見:https://help.aliyun.com/document_detail/148762.html

  1. Fastq數據上傳

詳見:https://help.aliyun.com/document_detail/148762.html

任務提交:

提交混合方式的工作流,需要您編輯自己的工作流YAML模板,示例如下:

1. 模板示例:

具體應用需要根據業務進行定製,例如:
使用什麼RemoteApi接口?
在什麼位置調用?
具體的調用參數是什麼?
在專有集群中執行什麼任務?
等等,

下面示例,描述如何在一個工作流中即包含RemoteApi的調用,並進行專有集群任務的調用:

apiVersion: argoproj.io/v1alpha1
kind: Workflow                  #new type of k8s spec
metadata:
  generateName: mpileup-    #name of workflow spec
spec:
  entrypoint: mpileup         #invoke the whalesay template
  arguments:
    parameters:
    - name: AKID
      value: ""
    - name: AKSEC
      value: ""
    - name: OSSURL
      value: "oss-cn-shenzhen-internal.aliyuncs.com"

    # fastq define
    - name: region
      value: "cn-shenzhen"
    - name: bucket
      value: "shenzhen"
    - name: fastq1
      value: "fastq/MGISEQ2000/MGISEQ2000_PCR-free_NA12878_1_V100003043_L01_1.fq.gz"
    - name: fastq2
      value: "fastq/MGISEQ2000/MGISEQ2000_PCR-free_NA12878_1_V100003043_L01_2.fq.gz"

    # gene define
    - name: bamFile
      value: "output/bam/gene.bam"
    - name: cpuNumber
      value: "32"
    - name: vcfFileName
      value: "gene.vcf"
    - name: service
      value: "s"

  templates:
  - name: agsmapping
    container:
      image: registry.cn-hangzhou.aliyuncs.com/aliyun-gene-service/ags-cli:v1.0.1-a5a06af
      imagePullPolicy: Always
      command: [bash,-c]
      args:
      - region={{workflow.parameters.region}};
        akID={{workflow.parameters.AKID}};
        akSec={{workflow.parameters.AKSEC}};
        akSecAuth=`echo -n $akSec | base64`;
        mkdir -p /root/.ags; echo "{\"region\":\"cn-beijing\",\"access_key_id\":\"$akID\",\"access_key_secret\":\"$akSecAuth\",\"cluster_id\":\"\",\"kubectl_location\":\"\"}" > /root/.ags/config;
        ags remote run mapping --region $region --fastq1 {{workflow.parameters.fastq1}} --fastq2 {{workflow.parameters.fastq2}} --bucket {{workflow.parameters.bucket}} --output-bam {{workflow.parameters.bamFile}} --markdup "true" --service {{workflow.parameters.service}} --reference=hg19 &> ags.log;
        sucessline=`cat ags.log | awk -FJobName '{print $2}' | awk -F\" '{print $3}'`;
        if [ "$sucessline" = "" ]; then
            echo "ags submit with error "$res;
            exit 1;
        fi;
        taskName=${sucessline:0:-1};

        for ((i=0; i<100; i++));
        do
            success=`ags remote get $taskName | grep Succeeded | wc -l`;
            if [ "$success" = "1" ]; then
                echo "ags task successful";
                break;
            fi;
            echo "exec command ags remote get $taskName";
            sleep 60;
        done;

  - name: mpileupprepare
    container:
      image: registry.cn-shenzhen.aliyuncs.com/plugins/gene-tools:ags-hunhe
      imagePullPolicy: Always
      command: [sh,-c]
      args:
      - ossutil config -e {{workflow.parameters.OSSURL}} -i {{workflow.parameters.AKID}} -k {{workflow.parameters.AKSEC}};
        bamFile={{workflow.parameters.bamFile}};
        bamRootDir=/data;
        mkdir -p $bamRootDir/$bamFile;
        ossutil cp --parallel=100 oss://{{workflow.parameters.bucket}}/$bamFile $bamRootDir/$bamFile;
        samtools view $bamRootDir/$bamFile/`basename $bamFile`;
      resources:
        requests:
          memory: 2Gi
          cpu: 2

  - name: mpileup
    dag:
      tasks:
      - name: agsmappingtask
        template: agsmapping

      - name: tasks-prepare
        dependencies: [agsmappingtask]
        template: mpileupprepare

過ags命令行工具提交工作流,參考文檔:https://help.aliyun.com/document_detail/121342.html

工作流編排模板,一般可以有兩部分:RemoteApi部分 + 專有集群任務部分;
例如編排模板可以有如下任務:

任務1:調用RemoteApi執行fastq數據的mapping流程,並等待mapping結束;

任務2:下載任務1生成的數據,並執行samtools view處理命令;

其中:registry.cn-hangzhou.aliyuncs.com/aliyun-gene-service/ags-cli:v1.0.1-a5a06af 為包含了ags命令行工具的鏡像,可以直接使用。

2. Remote Api命令解析:

AGS RemoteAPI提交命令如下:

ags remote run mapping \
--region cn-shenzhen # region of oss, e.g. cn-shenzhen, cn-beijing and etc\
--fastq1 MGISEQ/MGISEQ2000_PCR-free_NA12878_1_V100003043_L01_1.fq.gz # filename of fastq pair 2, fastq-path\filename \
--fastq2 MGISEQ/MGISEQ2000_PCR-free_NA12878_1_V100003043_L01_2.fq.gz  # filename of fastq pair 1\
--bucket my-test-shenzhen # Bucket name\
--output-bam bam/MGISEQ_NA12878_hs37d5.bam # Output filename of BAM \
--service "g" #SLA: [n:normal|s:silver|g:gold|p:platinum]\
--markdup [true|false|default true] #Mark Duplicated, by default true
--reference [hg19|hg38|<reference path on OSS>]

service:提供服務等級,n為普通模式,處理速度較慢;s、g、p提供的服務使用更小的時間;

Leave a Reply

Your email address will not be published. Required fields are marked *