Skip to content
InfiniTensorPublic

About

No description, website, or topics provided.

Resources

Contributing

Stars

350 stars

Watchers

1 watching

Forks

Repository files navigation

InfiniLM

star

本项目是基于 InfiniCore 的推理引擎。

当前版本依赖 third_party/InfiniCore 固定的 InfiniRT/InfiniOps/InfiniCCL 子模块。

InfiniLM 的 csrc/runtime 管理 owning Tensor/Memory 和 worker Runtime; csrc/execution 管理 graph/trace,并直接调用公共 InfiniOps API。 旧 Core runtime/ops 框架和独立 _infinicore 扩展已移除。

使用方式

一、编译并安装 InfiniCore

按固定子模块的 README 使用原生构建入口, 先安装 InfiniRT/InfiniOps/InfiniCCL,再设置 INFINI_ROOT 为同一安装前缀。 LM 不隐式构建依赖栈,也不安装 Core 的独立 Python runtime。 算子选择与 provider profile 由 InfiniOps 管理。

二、编译并安装 InfiniLM

  • 克隆项目

    由于仓库中含有子模块,所以在克隆时请添加 --recursive 或 --recurse-submodules,如:

    git clone --recursive https://github.com/InfiniTensor/InfiniLM.git

    或者在普通克隆后进行更新:

    git submodule update --init --recursive
  • 安装 InfiniLM Python 包

      export INFINI_ROOT=/absolute/path/to/coherent-prefix
      xmake f -y -m release --cxx11-abi=0 --capability-profile=release
      pip install -e . --no-build-isolation

    使用 CoreX PyTorch 时,需要让 InfiniLM 与 PyTorch/InfiniCore 使用相同的 libstdc++ ABI(以下为 ABI 0 示例;ABI 1 前缀需对应改为 1):

    export INFINILM_CXX11_ABI=0
    xmake f -y -m release --cxx11-abi=0 --capability-profile=release
    pip install -e . --no-build-isolation

    release profile 要求实际生成的公共 Ops API;bootstrap profile 会拒绝被排除的能力。 打包从同一前缀读取依赖;ELF 依赖检查需要 readelf。 可选 Torch checkpoint 兼容路径需要安装 torch-compat。

    返回的引擎 Tensor 是保有存储的可变借用视图;下一次 forward 复用缓冲区前, 调用方应读完或复制输出。模型、后端、并行及 graph 组合以实际支持边界为准。

  • 单次推理测试

    • llama示例
    python examples/test_infer.py --device [cpu | nvidia | qy | metax | moore | iluvatar | ali | cambricon | hygon] --model=<path/to/model_dir>
    • 例如:
    python examples/test_infer.py --device=nvidia --model=/models/TinyLlama-1.1B-Chat-v1.0
  • 分布式推理测试

    • 9g示例
    python examples/test_infer.py [-- device nvidia] --model=<path/to/model> --backend=cpp --tp=NDEV --batch-size=MAX_BATCH
    • 例如: 9G7B模型,cpp后端,batch_size为16,4卡分布式
    python examples/test_infer.py --device nvidia --model=/models/9G7B_MHA/ --backend=cpp --tp=4 --batch-size=16
    • PP=2 示例:

      在两个终端中分别启动 stage 0 和 stage 1。两个进程的模型、并行和缓存参数必须保持一致。

      # Terminal 1: stage 0 / coordinator (--node-rank=0)
      CUDA_VISIBLE_DEVICES=0 python examples/test_infer.py --device=nvidia --model=<path/to/model> --tp=1 --pp=2 --node-rank=0 --master-addr=127.0.0.1 --master-port=29500 --enable-paged-attn --attn=flash-attn --num-blocks=128
      
      # Terminal 2: stage 1 / worker
      CUDA_VISIBLE_DEVICES=1 python examples/test_infer.py --device=nvidia --model=<path/to/model> --tp=1 --pp=2 --node-rank=1 --master-addr=127.0.0.1 --master-port=29500 --enable-paged-attn --attn=flash-attn --num-blocks=128

      跨节点运行时,每个节点的命令中的 --master-addr 和 --master-port 设置为 stage 0 节点的 IP 地址和通信端口。

  • 推理服务测试

    • 启动推理服务

      python python/infinilm/server/inference_server.py --device [cpu | nvidia | qy | metax | moore | iluvatar | ali | cambricon | hygon] --model=<path/to/model-dir> --max-new-tokens=MAX_TOKENS --max-batch-size=MAX_BATCH --tp=NDEV --temperature=TEMP --top-p=TOP_P --top-k=TOP_K --host=HOST --port=PORT
    • 单卡示例:

      CUDA_VISIBLE_DEVICES=0 python python/infinilm/server/inference_server.py --device nvidia --model=/models/9G7B_MHA/ --max-new-tokens=100 --max-batch-size=32 --tp=1 --temperature=1.0 --top-p=0.8 --top-k=1
    • 多卡分布式示例:

      CUDA_VISIBLE_DEVICES=0,1,2,3 python python/infinilm/server/inference_server.py --device nvidia --model=/models/9G7B_MHA/ --max-new-tokens=100 --max-batch-size=32 --tp=4 --temperature=1.0 --top-p=0.8 --top-k=1
    • 使用paged attention, flash attention后端,cuda graph等功能:

      CUDA_VISIBLE_DEVICES=0,1,2,3 python python/infinilm/server/inference_server.py --device nvidia --model=/models/9G7B_MHA/ --enable-paged-attn --attn=flash-attn --enable-graph
    • PP=2 推理服务示例:

      只有 stage 0 启动 HTTP 服务。两个进程使用相同的 PP rendezvous 地址和模型配置。

      # Terminal 1: stage 0 / coordinator and HTTP server
      python python/infinilm/server/inference_server.py --device=nvidia --model=<path/to/model> --tp=1 --pp=2 --node-rank=0 --master-addr=<HOST.IP> --master-port=29500 --enable-paged-attn --attn=flash-attn --num-blocks=128 --max-batch-size=32 --port=8000
      
      # Terminal 2: stage 1 / worker
      python python/infinilm/server/inference_server.py --device=nvidia --model=<path/to/model> --tp=1 --pp=2 --node-rank=1 --master-addr=<HOST.IP> --master-port=29500 --enable-paged-attn --attn=flash-attn --num-blocks=128 --max-batch-size=32 --port=8000
    • 测试推理服务性能:

      python scripts/test_perf.py --verbose
    • 单请求推理服务测试

      python test/service/request.py --content="text:Image 1:" --content="image_url:xxx.jpg" --content="text:Image 2:" --content="image_url:xxxx.jpg" --content="text:Compare the 2 images."
  • 运行推理基准测试(C-Eval/MMLU)

    python test/bench/test_benchmark.py --device [cpu | nvidia | qy | metax | moore | iluvatar | ali | cambricon | hygon] --model <path/to/model_dir> --bench {ceval|mmlu} [--backend cpp] [--tp N] [--subject SUBJECT] [--num-samples N] [--max-new-tokens N] [--output-csv PATH] [--cache-dir PATH]
    • 参数说明:

      • --subject: 指定科目,支持单个科目、多个科目(逗号分隔)或 all(默认值,加载全部科目)
      • --output-csv: 可选,指定CSV输出文件路径。如未指定则不生成CSV文件。CSV包含每个科目的结果和总体结果
      • --cache-dir: 可选,指定数据集缓存目录的父目录。应指向包含 ceval___ceval-exam 和 cais___mmlu 等数据集子目录的父目录(例如 ~/.cache/huggingface/datasets/)。设置后脚本优先使用本地 CSV(pandas.read_csv)离线加载数据,避免 load_dataset 的网络请求
    • C-Eval示例:

      • 单个科目:
        python test/bench/test_benchmark.py --device nvidia /models/9G7B_MHA --bench ceval --subject middle_school_mathematics --num-samples 100 --backend cpp --tp 1
      • 多个科目(逗号分隔):
        python test/bench/test_benchmark.py --device nvidia /models/9G7B_MHA --bench ceval --subject middle_school_mathematics,high_school_physics --backend cpp --tp 1 --output-csv results.csv
      • 全部科目并输出CSV:
        python test/bench/test_benchmark.py --device nvidia /models/9G7B_MHA --bench ceval --subject all --backend cpp --tp 1 --output-csv results.csv
      • 使用缓存目录加速加载:
        python test/bench/test_benchmark.py --device nvidia /models/9G7B_MHA --bench ceval --subject middle_school_mathematics --backend cpp --tp 1 --cache-dir ~/.cache/huggingface/datasets/

        注意:--cache-dir 应指向包含 ceval___ceval-exam 和 cais___mmlu 等数据集子目录的父目录,而不是直接指向这些子目录

    • MMLU示例:

      • 单个科目:
        python test/bench/test_benchmark.py --device nvidia /models/9G7B_MHA --bench mmlu --subject abstract_algebra --backend cpp --tp 1
      • 多个科目(逗号分隔):
        python test/bench/test_benchmark.py --device nvidia /models/9G7B_MHA --bench mmlu --subject abstract_algebra,anatomy,astronomy --backend cpp --tp 1 --output-csv results.csv
      • 使用缓存目录加速加载:
        python test/bench/test_benchmark.py --device nvidia /models/9G7B_MHA --bench mmlu --subject abstract_algebra --backend cpp --tp 1 --cache-dir ~/.cache/huggingface/datasets/

        注意:--cache-dir 应指向包含 ceval___ceval-exam 和 cais___mmlu 等数据集子目录的父目录,而不是直接指向这些子目录

  • 试验中功能

    • Warm Up
      python examples/bench.py --device nvidia --model=<model-path> --warmup
    • Paged Attention
      python examples/bench.py --device nvidia --model=<model-path> --enable-paged-attn
    • CUDA Graph
      python examples/bench.py --device nvidia --model=<model-path> --enable-paged-attn --enable-graph
    • 选择attention后端 (使用flash attention后端需要先在InfiniCore完成相关配置和编译)
      python examples/bench.py --device nvidia --model=<model-path> --enable-paged-attn [--attn=default | --attn=flash-attn]

About

No description, website, or topics provided.

Resources

Contributing

Stars

350 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages