w
gcw_uQ09W7jl/pangolin
模型介绍
文件和版本
Pull Requests
讨论
分析

multimolecule/pangolin on Ascend NPU

模型与任务

  • 模型:multimolecule/pangolin
  • Revision:39f9ff44ed65f773099c363712934d13c277c8d0
  • 适配路线:splicing
  • 设备:npu:0

环境依赖

{
  "torch": "2.9.0+cpu",
  "torch_npu_available": true,
  "device_name": "Ascend910_9362",
  "device_count": 2,
  "torch_npu": "2.9.0.post1+gitee7ba04",
  "transformers": "5.9.0",
  "multimolecule": "unknown"
}

安装:pip install -r requirements.txt

NPU 推理

默认执行:python inference.py

真实输入

{
  "num_reference_sequences": 4,
  "num_short_sequences": 2,
  "num_variant_pairs": 4,
  "sequence_length": 500,
  "short_length": 30,
  "construction": "deterministic random ACGU, motif GU/AG embedded, AU-rich, N-masked; SNV at central, donor disrupt, T vs U equivalence; plus short 30 nt from widget",
  "alphabet": "ACGU (T->U via replace_T_with_U), N=pad/unk",
  "replace_T_with_U": true,
  "direction": "5'->3'",
  "context": 10000,
  "padding": "internal 5000 each side, valid conv crop to L",
  "output_channels": "12 = 4 tissues * [score 2 + usage 1]",
  "tissue_names": [
    "heart",
    "liver",
    "brain",
    "testis"
  ],
  "reference_sequences": [
    {
      "name": "random_ACGU_500",
      "length": 500,
      "sha256": "98482eef4abb10139cbc75c7d71665f2e5b9e9d2c52c7f69018e148b378af165",
      "preview": "UUAGUUGUGCCGCAGCGAAGUAGUGCUUGAAAUAUGCGAC"
    },
    {
      "name": "motif_GU_AG_500",
      "length": 500,
      "sha256": "7631f32c7df548dad95fdf67acd07da8971b156c9c8737128ccb41f405c0d3a3",
      "preview": "AGGACCCUAUGGCACGGUGGGCAAGCUCCCGCCCGGUACA"
    },
    {
      "name": "AU_rich_500",
      "length": 500,
      "sha256": "8ff6870fca73be12c37607016e316a4f14889286bc5d6b72561af181aa50eb23",
      "preview": "AUUAAUAUCAAAUUCUUAGUAUUUAUUAUAUAUAUUAACU"
    },
    {
      "name": "N_masked_500",
      "length": 500,
      "sha256": "73692f245e721bce83610e1760efd4d469ef415e4604f8beafde479c17616c0b",
      "preview": "CGCCUCAGCCGUUGACCGCAACACCGUGAAGCACGGGUAA"
    }
  ],
  "short_sequences": [
    {
      "name": "short_30_ref",
      "length": 30,
      "sha256": "b98f4f9f334cf254f1057f8ac540d68a0b02d90a845020cfecc8fcfd7fea590e",
      "preview": "AUGCGAUCGAUCGAUCGAUCGAUCGAUCUA"
    },
    {
      "name": "short_30_alt",
      "length": 30,
      "sha256": "ac0955f72078ed1699b87658ee878db1462e59fafc1ceff495b08b1d5455acb3",
      "preview": "AUGCGAUCGAUCGAUUGAUCGAUCGAUCUA"
    }
  ],
  "variant_pairs": [
    {
      "name": "random_SNV_500",
      "ref_sha256": "98482eef4abb10139cbc75c7d71665f2e5b9e9d2c52c7f69018e148b378af165",
      "alt_sha256": "97c2cb9022f92fa88fdd9774e1505239519a6459781d14437b8d165630ecc656",
      "preview_ref": "UUAGUUGUGCCGCAGCGAAGUAGUGCUUGAAAUAUGCGAC",
      "preview_alt": "UUAGUUGUGCCGCAGCGAAGUAGUGCUUGAAAUAUGCGAC"
    },
    {
      "name": "motif_donor_SNV",
      "ref_sha256": "7631f32c7df548dad95fdf67acd07da8971b156c9c8737128ccb41f405c0d3a3",
      "alt_sha256": "3e0e72dca80f4b93a04bab865da209965602ee5adcdcf7423c60b44b7745446f",
      "preview_ref": "AGGACCCUAUGGCACGGUGGGCAAGCUCCCGCCCGGUACA",
      "preview_alt": "AGGACCCUAUGGCACGGUGGGCAAGCUCCCGCCCGGUACA"
    },
    {
      "name": "DNA_T_vs_RNA_U",
      "ref_sha256": "73692f245e721bce83610e1760efd4d469ef415e4604f8beafde479c17616c0b",
      "alt_sha256": "5b9ef700b62dc8467e987cafc2afe7141d9cebb20d453cb10787527ea60770ac",
      "preview_ref": "CGCCUCAGCCGUUGACCGCAACACCGUGAAGCACGGGUAA",
      "preview_alt": "CGCCTCAGCCGTTGACCGCAACACCGTGAAGCACGGGTAA"
    },
    {
      "name": "short_SNV_30",
      "ref_sha256": "b98f4f9f334cf254f1057f8ac540d68a0b02d90a845020cfecc8fcfd7fea590e",
      "alt_sha256": "ac0955f72078ed1699b87658ee878db1462e59fafc1ceff495b08b1d5455acb3",
      "preview_ref": "AUGCGAUCGAUCGAUCGAUCGAUCGAUCUA",
      "preview_alt": "AUGCGAUCGAUCGAUUGAUCGAUCGAUCUA"
    }
  ],
  "tokenizer": "RnaTokenizer vocab A0 C1 G2 U3 N4 pad N, replace_T_with_U True",
  "dtype": "float32"
}

真实推理结果

{
  "output_shape_probabilities": [
    4,
    500,
    12
  ],
  "output_shape_short": [
    2,
    30,
    12
  ],
  "output_shape_delta": [
    4,
    500,
    12
  ],
  "dtype": "float32",
  "probabilities_range": [
    0.0026711926329880953,
    0.9608384966850281
  ],
  "delta_range": [
    -0.07470118999481201,
    0.04542946815490723
  ],
  "probabilities_per_sequence_central": [
    {
      "name": "random_ACGU_500",
      "max_usage": 0.7979575395584106,
      "mean_prob": 0.3389914631843567
    },
    {
      "name": "motif_GU_AG_500",
      "max_usage": 0.8024621605873108,
      "mean_prob": 0.3376014530658722
    },
    {
      "name": "AU_rich_500",
      "max_usage": 0.06548089534044266,
      "mean_prob": 0.3403639793395996
    },
    {
      "name": "N_masked_500",
      "max_usage": 0.7080919742584229,
      "mean_prob": 0.3387630879878998
    }
  ],
  "short_sample": [
    [
      0.9472239017486572,
      0.05277614668011665,
      0.029712308198213577,
      0.948218047618866,
      0.05178201198577881,
      0.011563194915652275,
      0.9488821029663086,
      0.051117975264787674,
      0.020187366753816605,
      0.9479959011077881,
      0.05200408399105072,
      0.014677181839942932
    ],
    [
      0.9484885931015015,
      0.05151141434907913,
      0.035874877125024796,
      0.9478874206542969,
      0.052112579345703125,
      0.00830162689089775,
      0.9470071792602539,
      0.052992839366197586,
      0.02044040895998478,
      0.9483068585395813,
      0.05169321596622467,
      0.015555384568870068
    ],
    [
      0.9486720561981201,
      0.051327936351299286,
      0.031181953847408295,
      0.9473021030426025,
      0.05269792303442955,
      0.010689133778214455,
      0.9483687281608582,
      0.05163126438856125,
      0.01739984005689621,
      0.9486778378486633,
      0.05132222920656204,
      0.012048284523189068
    ]
  ],
  "delta_per_pair_central": [
    {
      "name": "random_SNV_500",
      "delta_max": 0.07470118999481201,
      "delta_mean": 0.0003778986865654588,
      "central_sample": [
        [
          0.0003345608711242676,
          -0.0003345683217048645,
          -0.0008051246404647827
        ],
        [
          0.0011563897132873535,
          -0.0011564567685127258,
          0.0003238413482904434
        ],
        [
          -0.0004355311393737793,
          0.00043555349111557007,
          -0.0019150469452142715
        ],
        [
          0.000495612621307373,
          -0.0004955939948558807,
          -0.005242329090833664
        ],
        [
          -0.0002682209014892578,
          0.0002682246267795563,
          0.001288844272494316
        ]
      ]
    },
    {
      "name": "motif_donor_SNV",
      "delta_max": 0.04542946815490723,
      "delta_mean": 0.000564686197321862,
      "central_sample": [
        [
          0.001277148723602295,
          -0.0012771114706993103,
          -0.009008759632706642
        ],
        [
          0.010753452777862549,
          -0.010753337293863297,
          -0.003165280446410179
        ],
        [
          0.00020200014114379883,
          -0.00020194798707962036,
          -0.006747644394636154
        ],
        [
          0.00021314620971679688,
          -0.00021316856145858765,
          -0.005954652093350887
        ],
        [
          0.0005840063095092773,
          -0.0005841553211212158,
          -0.0012862542644143105
        ]
      ]
    },
    {
      "name": "DNA_T_vs_RNA_U",
      "delta_max": 0.0,
      "delta_mean": 0.0,
      "central_sample": [
        [
          0.0,
          0.0,
          0.0
        ],
        [
          0.0,
          0.0,
          0.0
        ],
        [
          0.0,
          0.0,
          0.0
        ],
        [
          0.0,
          0.0,
          0.0
        ],
        [
          0.0,
          0.0,
          0.0
        ]
      ]
    },
    {
      "name": "short_SNV_30",
      "delta_max": 0.01678704470396042,
      "delta_mean": 0.0005158275598660111,
      "central_sample": [
        [
          0.0012259483337402344,
          -0.0012258999049663544,
          0.0001253373920917511
        ],
        [
          0.0009818673133850098,
          -0.0009819790720939636,
          0.00015214458107948303
        ],
        [
          0.0012229681015014648,
          -0.0012228935956954956,
          -5.934759974479675e-05
        ],
        [
          0.0012123584747314453,
          -0.0012124553322792053,
          -0.0009995624423027039
        ],
        [
          0.0016332268714904785,
          -0.0016332454979419708,
          -0.00040858983993530273
        ]
      ]
    }
  ],
  "device_proof": "first_param:npu:0, logits:npu:0, short:npu:0, delta:npu:0, input:npu:0",
  "probabilities_sample": [
    [
      0.9476736783981323,
      0.052326351404190063,
      0.026391422376036644
    ],
    [
      0.9476853609085083,
      0.05231470614671707,
      0.022920886054635048
    ],
    [
      0.9500923156738281,
      0.04990772157907486,
      0.02561817318201065
    ],
    [
      0.9501460194587708,
      0.04985402897000313,
      0.030140889808535576
    ]
  ],
  "delta_sample_pair0": [
    [
      0.0003345608711242676,
      -0.0003345683217048645,
      -0.0008051246404647827
    ],
    [
      0.0011563897132873535,
      -0.0011564567685127258,
      0.0003238413482904434
    ],
    [
      -0.0004355311393737793,
      0.00043555349111557007,
      -0.0019150469452142715
    ],
    [
      0.000495612621307373,
      -0.0004955939948558807,
      -0.005242329090833664
    ],
    [
      -0.0002682209014892578,
      0.0002682246267795563,
      0.001288844272494316
    ]
  ],
  "per_tissue_softmax_check": true
}

CPU-NPU 一致性

{
  "atol": 0.0005,
  "rtol": 0.001,
  "max_abs_diff_prob": 0.00022774934768676758,
  "mean_abs_diff_prob": 1.8122060282621533e-05,
  "max_abs_diff_short": 0.00014290958642959595,
  "mean_abs_diff_short": 2.1248208213364705e-05,
  "max_abs_diff_delta": 0.00011473894119262695,
  "mean_abs_diff_delta": 1.948858334799297e-05,
  "passed": true,
  "passed_prob": true,
  "passed_short": true,
  "passed_delta": true,
  "pearson_prob": 0.9999999985389169,
  "pearson_delta": 0.9998687579590108,
  "shape_prob": [
    2,
    500,
    12
  ],
  "shape_short": [
    2,
    30,
    12
  ],
  "shape_delta": [
    2,
    500,
    12
  ]
}

性能

{
  "first_run_ms": 3939.7183670662344,
  "first_var_run_ms": 7559.639531187713,
  "second_run_ms": 3780.374507419765,
  "short_run_ms": 2132.776544895023,
  "avg_ms": 3851.483988855034,
  "min_ms": 3778.3678262494504,
  "max_ms": 4126.697968225926,
  "p50_ms": 3783.962103072554,
  "p90_ms": 3991.247631702572,
  "throughput_seq_per_s": 1.0385607240156582,
  "throughput_bases_per_s": 519.2803620078291,
  "batch_size": 4,
  "sequence_length": 500,
  "dtype": "float32"
}

自验证截图

Agent workflow

NPU device call

Model result

三张图片均由 xterm.js 根据本次真实日志生成。

已知限制

  • 仅对本次记录的模型 revision、输入契约、dtype 与 Ascend 环境完成验证。

标签

#NPU #Ascend #Ascend910