llama.cpp加速器:一键启动GPU模型计算‌

《llama.cpp加速器:一键启动GPU模型计算》

随着大规模语言模型(LLM)在桌面与边缘设备上的广泛应用,如何在资源有限的环境中实现高效推理成为关键痛点。llama.cpp 以其轻量化、纯 C/C++ 实现的特点,使得在 CPU 上运行 LLaMA 系列模型变得非常简单。但当模型规模增大时,单纯依赖 CPU 性能容易导致推理速度过慢。本文将介绍如何借助 llama.cpp 加速器,一键启动 GPU 计算,让模型在支持 CUDA 或 Vulkan 的显卡上获得显著加速。文中涵盖 环境准备源码编译GPU 调度原理一键启动脚本详细代码示例 以及 Mermaid 流程图 解析,帮助你快速上手、轻松理解。


目录

  1. 背景与目标
  2. llama.cpp 简介
  3. GPU 加速原理概览
  4. 环境准备

  5. 源码获取与编译

  6. 一键启动脚本示例
  7. 推理流程图解
  8. 详细代码示例

  9. 性能对比与调优建议
  10. 常见问题与排查
  11. 总结

1. 背景与目标

  • 背景llama.cpp 原生仅支持 CPU 后端,基于 4-bit / 8-bit 量化的 GGML 张量运算,在较强 CPU(如 x86\_64 多核) 上可实现实用级速度。然而,当模型规模达到几十亿参数时,CPU 推理仍显得捉襟见肘。
  • 目标:借助 GPU 强大的并行计算能力,让 llama.cpp 在显卡上运行,并提供简单“一键”脚本,方便用户直接体验GPU 推理加速

2. llama.cpp 简介

llama.cpp 是由 gojomo/ggml 团队基于 GGML(Generic Graph Machine Learning)张量库编写的 C/C++ 项目。它能够加载 LLaMA 系列权重(经过转换为 GGML 格式 .bin),并在多种架构(x86\_64、ARM64、Raspberry Pi 等)上进行推理。其核心特点包括:

  • 轻量化:无第三方深度学习框架依赖,仅依赖 C/C++ 标准库和 GGML。
  • 跨平台:支持 Windows、Linux、macOS,以及 ARM 架构。
  • 多量化:原生支持 4-bit、8-bit 等低精度量化,有效降低显存/内存占用。
  • 可扩展:可通过后端适配器接入 GPU 计算(CUDA/Vulkan)。

默认情况下,main 分支只在 CPU 上推理。本文将演示如何启用 GPU 后端,让推理速度获得数倍提升。


3. GPU 加速原理概览

llama.cpp 中,目前社区主要提供两种 GPU 后端:

  1. CUDA 后端

    • 基于 NVIDIA GPU 的 CUDA 编程模型,用于执行矩阵乘法与向量运算。
    • 利用 cuBLAS/cuDNN 或自定义 CUDA kernel,实现 GGML 张量在显存中的运算。
    • 需要安装 NVIDIA 驱动、CUDA Toolkit,以及编译时启用 -DGGML_CUDA=on
  2. Vulkan 后端

    • 基于 GPU 通用图形 API Vulkan,通过 SPIR-V shader 实现张量运算。
    • 支持跨厂商 GPU(NVIDIA、AMD、Intel、ARM Mali、Qualcomm Adreno 等)。
    • 需要安装 Vulkan SDK,并在编译时启用 -DGGML_VULKAN=on

Mermaid 流程图示意:GPU 后端在推理流程中负责以下两个关键步骤:

  1. 前向计算加速:利用并行矩阵乘法完成注意力机制、前馈层等运算。
  2. 缓存管理:将模型参数与激活值从 CPU 内存拷贝到 GPU 显存,避免频繁传输开销。
flowchart TB
  A[加载 GGML 模型 (.bin)] --> B{选择后端}
  B -->|CPU| C[GGML CPU 前向调用]
  B -->|CUDA| D[GGML CUDA 前向调用]
  B -->|Vulkan| E[GGML Vulkan 前向调用]
  D --> F[CUDA Kernels: 矩阵运算、张量操作]
  E --> G[Vulkan Shader: 矩阵运算、张量操作]
  F --> H[输出日志 & 下一步迭代]
  G --> H
  C --> H

4. 环境准备

4.1 硬件要求

  • CUDA 后端

    • NVIDIA GPU(支持 Compute Capability ≥ 5.0),常见如 RTX 20 系列及以上、A 系列、Quadro、Tesla 等。
    • 显存建议 ≥ 4GB(视模型量化情况而定)。
  • Vulkan 后端

    • 支持 Vulkan 的 GPU(NVIDIA、AMD、Intel、ARM Mali、Qualcomm Adreno 等)。
    • 驱动需安装并启用 Vulkan 扩展。

4.2 软件依赖

  • 通用

    • CMake ≥ 3.18
    • C/C++ 编译器(GCC/Clang/MSVC)
    • Git
  • CUDA 后端

    • NVIDIA 驱动
    • CUDA Toolkit ≥ 11.1,带有 cuBLAS/cuDNN
    • libcudartlibcublas 动态库
  • Vulkan 后端

    • Vulkan SDK(含 vulkan-loadervulkan-validation-layers
    • GPU 驱动已启用 Vulkan 支持
    • libvulkan.sovk_shaderc 等库
  • 示例 Linux 环境安装(以 Ubuntu 22.04 为例):

    # 安装基础工具
    sudo apt update
    sudo apt install -y git build-essential cmake
    
    # CUDA Toolkit 安装(示例)
    sudo apt install -y nvidia-cuda-toolkit
    
    # Vulkan SDK 安装(示例)
    sudo apt install -y libvulkan1 vulkan-tools vulkan-validationlayers-dev
    
    # 确认版本
    nvcc --version     # CUDA
    vulkaninfo | grep "apiVersion"  # Vulkan

5. 源码获取与编译

以下示例在 Ubuntu 22.04 x86\_64 上演示如何克隆、编译并启用 CUDA / Vulkan 支持。如果你使用的是其他平台,仅需对应调整依赖即可。

5.1 克隆仓库

git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp

5.2 启用 CUDA/Vulkan 支持

llama.cpp 默认的 Makefile 已包含相关选项,通过以下两种方式传递编译标志:

  • 方式一:修改 Makefile
    在仓库根目录打开 Makefile,找到类似:

    # 取消注释以下行来启用 CUDA
    # LLAMA_CUBLAS=1
    
    # 取消注释以下行来启用 Vulkan
    # LLAMA_VULKAN=1

    将对应行前的 # 去掉并保存。

  • 方式二:命令行传参
    直接通过环境变量或 CMake 选项:

    # 编译启用 CUDA,假设你使用 Makefile
    make clean
    make LLAMA_CUBLAS=1
    
    # 编译启用 Vulkan
    make clean
    make LLAMA_VULKAN=1
    
    # 若同时启用 CUDA 和 Vulkan
    make clean
    make LLAMA_CUBLAS=1 LLAMA_VULKAN=1
注意:CUDA 与 Vulkan 不能在同一进程中同时执行推理,你需要在运行时选择其一作为后端。

5.3 编译示例

以下示例编译带 CUDA 支持的 llama.cpp

# 进入仓库后
make clean

# 编译启用 CUDA(依赖已安装 UFO 示例)
make LLAMA_CUBLAS=1 -j$(nproc)

# 编译结果:可执行文件 llama,位于当前目录
ls -l llama

编译带 Vulkan 支持则:

make clean
make LLAMA_VULKAN=1 -j$(nproc)

编译成功后,目录下会生成以下主要二进制与库文件:

  • llama:主推理可执行程序
  • libggml.a:静态链接的 GGML 库
  • ggml-cuda.o / ggml-vulkan.o:对应的 GPU 后端插件对象文件

6. 一键启动脚本示例

为了让用户“一键启动” GPU 推理,我们可以编写一个简单的Shell 脚本,自动检测可用后端并执行推理。以下示例脚本 run_llama_gpu.sh 演示了这一思路:

#!/usr/bin/env bash
# run_llama_gpu.sh
# 用法示例:./run_llama_gpu.sh -m models/7B/ggml-model-f16.bin -p "你好,世界!"

set -e

# 默认参数
MODEL_PATH=""
PROMPT="Hello llama.cpp"
BACKEND="cpu"  # 可选 cpu, cuda, vulkan
NUM_THREADS=4

print_usage() {
  echo "Usage: $0 [-m model_path] [-p prompt] [-b backend: cpu|cuda|vulkan] [-t num_threads]"
}

# 解析命令行参数
while getopts "m:p:b:t:h" opt; do
  case $opt in
    m) MODEL_PATH="$OPTARG" ;;
    p) PROMPT="$OPTARG" ;;
    b) BACKEND="$OPTARG" ;;
    t) NUM_THREADS="$OPTARG" ;;
    h) print_usage; exit 0 ;;
    *) print_usage; exit 1 ;;
  esac
done

if [[ -z "$MODEL_PATH" ]]; then
  echo "[ERROR] 必须指定模型路径 -m"
  print_usage
  exit 1
fi

# 检测后端
if [[ "$BACKEND" == "cuda" ]]; then
  echo "[INFO] 选择后端:CUDA"
  BACKEND_FLAG="--use-cuda"
elif [[ "$BACKEND" == "vulkan" ]]; then
  echo "[INFO] 选择后端:Vulkan"
  BACKEND_FLAG="--use-vulkan"
else
  echo "[INFO] 选择后端:CPU"
  BACKEND_FLAG=""
fi

# 执行推理
echo "[INFO] 模型路径:${MODEL_PATH}"
echo "[INFO] 提示词:${PROMPT}"
echo "[INFO] 线程数:${NUM_THREADS}"

./llama \
  -m "${MODEL_PATH}" \
  -t "${NUM_THREADS}" \
  ${BACKEND_FLAG} \
  -p "${PROMPT}"
  • -m model_path:指定 GGML 格式模型文件路径。
  • -p prompt:输入提示词。
  • -b backend:可选 cpu(默认)、cudavulkan
  • -t num_threads:CPU 模式下使用的线程数。

赋予脚本可执行权限后,在终端运行即可一键启动:

chmod +x run_llama_gpu.sh

# CUDA 后端示例
./run_llama_gpu.sh -m models/7B/ggml-model-f16.bin -p "今天天气如何?" -b cuda -t 8

# Vulkan 后端示例
./run_llama_gpu.sh -m models/7B/ggml-model-f16.bin -p "你好,Vulkan!" -b vulkan

脚本内部会根据 -b 参数决定是否添加 --use-cuda--use-vulkan 标志。


7. 推理流程图解

下面我们用 Mermaid 流程图,展示 llama.cpp 在 GPU 后端下的完整推理过程。

flowchart TD
  A[启动脚本 run_llama_gpu.sh] --> B{选择后端}
  B -->|CPU| C[调用 llama -m model -t threads -p prompt]
  B -->|CUDA| D[调用 llama -m model -t threads --use-cuda -p prompt]
  B -->|Vulkan| E[调用 llama -m model -t threads --use-vulkan -p prompt]

  subgraph 通用初始化
    F[加载 GGML 模型至 CPU 内存]
    F --> G[分配临时张量缓冲区]
  end

  C --> H[CPU 前向:GGML CPU 运算]
  D --> I[CUDA 前向:参数从 CPU 拷贝到 GPU]
  E --> J[Vulkan 前向:参数上传至 GPU via Vulkan]

  I --> K[CUDA Kernel:矩阵乘法、矢量运算]
  J --> L[Vulkan Shader:矩阵乘法、矢量运算]
  H --> M[CPU 运算:矩阵乘法、矢量运算]

  K --> N[计算输出 logits]
  L --> N
  M --> N

  N --> O[解码生成文本]
  O --> P[打印 / 保存结果]
  • 加载阶段:先将模型从磁盘加载到 CPU 内存(GGML 张量结构)。
  • 后端初始化:若选择 GPU 后端,需将参数拷贝至 GPU(CUDA)或 Vulkan 设备内存,并在设备上分配执行缓冲区。
  • 前向运算:分别调用对应后端的并行运算单元(CPU 多线程 / CUDA kernel / Vulkan shader)。
  • 解码阶段:根据输出 logits 或概率分布做采样,逐 token 生成、拼接成最终文本。

8. 详细代码示例

下面针对模型转换、CUDA 后端与 Vulkan 后端,给出更详细的代码示例及说明,帮助你更深入理解并灵活运用。

8.1 模型转换与量化

llama.cpp 需要将官方 LLaMA 原始权重(PyTorch 格式)转换为 GGML 二进制格式,并可选择量化(4-bit、8-bit)。社区常用脚本位于 convert 目录下。

  1. 安装 Python 依赖

    sudo apt install -y python3 python3-pip
    pip install torch transformers tqdm
  2. 下载原始权重
    假设你已经从 Meta 官网获取到 LLaMA-7B 的 PyTorch 权重,并存放于 ~/llama_weights/

    ~/llama_weights/
    ├─ params.json
    ├─ tokenizer.model
    ├─ con.consolidated.00.pth
    ├─ con.consolidated.01.pth
    └─ con.consolidated.02.pth
  3. 执行转换脚本

    cd llama.cpp
    
    # 转换为 16-bit FP 格式(默认精度)
    python3 convert.py \
      --model_path ~/llama_weights \
      --outfile models/7B/ggml-model-f16.bin
    
    # 转换并量化为 8-bit
    python3 quantize.py \
      models/7B/ggml-model-f16.bin \
      models/7B/ggml-model-q8_0.bin \
      q8_0
    
    # 转换并量化为 4-bit
    python3 quantize.py \
      models/7B/ggml-model-f16.bin \
      models/7B/ggml-model-q4_0.bin \
      q4_0
  • convert.py:生成原始精度(FP16)GGML 模型
  • quantize.py:将 FP16 模型量化为低精度,使得推理时显存占用更低

转换完成后,模型文件位于 models/7B/ 下,名称如 ggml-model-f16.binggml-model-q8_0.bin 等。

8.2 CUDA 后端推理示例

  1. 确认 llama 可执行文件支持 CUDA

    ./llama --help | grep use-cuda
    # 应输出包含 --use-cuda 标志
  2. CUDA 推理基本命令

    ./llama \
      -m models/7B/ggml-model-q4_0.bin \
      -t 8 \
      --use-cuda \
      -p "人类文明的下一步是什么?"
  3. 源码解析
    ggml-cuda.c 中,核心函数示例(简化):

    // ggml-cuda.c
    void ggml_cuda_init() {
        // 初始化 CUDA 设备上下文
        cudaSetDevice(0);
        cudaStreamCreate(&stream);
        // 为所有参数分配 GPU 缓冲区
        for (int i = 0; i < model->n_tensor; i++) {
            size_t bytes = model->tensors[i].size * sizeof(float);
            cudaMalloc(&model->tensors_gpu[i], bytes);
            // 从 CPU 内存拷贝到 GPU
            cudaMemcpy(model->tensors_gpu[i], model->tensors[i].data, bytes, cudaMemcpyHostToDevice);
        }
    }
    
    void ggml_cuda_op_mul_mat(
        ggml_tensor *A_cpu, ggml_tensor *B_cpu, ggml_tensor *C_cpu) {
        // 获取对应 GPU Tensor 指针
        float *A = (float *) model->tensors_gpu[A_cpu->id];
        float *B = (float *) model->tensors_gpu[B_cpu->id];
        float *C = (float *) model->tensors_gpu[C_cpu->id];
        // 使用 cuBLAS 执行矩阵乘法: C = A * B
        cublasSgemm(handle, ... , A, ... , B, ..., C, ...);
    }
    • 初始化阶段ggml_cuda_init() 会将所有模型参数(权重、偏置)从 CPU 内存拷贝到 GPU 显存。
    • 前向计算阶段:当调用矩阵乘法等运算时,会在对应的 ggml_cuda_op_* 函数中调用 cuBLAS / 自定义 kernel 完成并行运算。
  4. 运行示例输出

    llama.cpp (CUDA) v1.0.0
    model: models/7B/ggml-model-q4_0.bin
    n_threads = 8 / 8 | n_gpu_layers = 32
    loading model from models/7B/ggml-model-q4_0.bin
    CUDA backend enabled
    prompt: "人类文明的下一步是什么?"
    > 人类文明的下一步是人工智能与量子计算的深度融合,将带来前所未有的生产力革命。...

8.3 Vulkan 后端推理示例

  1. 确认 llama 支持 Vulkan

    ./llama --help | grep use-vulkan
    # 应输出包含 --use-vulkan 标志
  2. Vulkan 推理基本命令

    ./llama \
      -m models/7B/ggml-model-q4_0.bin \
      -t 4 \
      --use-vulkan \
      -p "未来的交通方式会怎样?"
  3. 源码解析
    ggml-vulkan.c 中,核心函数示例(简化):

    // ggml-vulkan.c
    void ggml_vulkan_init() {
        // 初始化 Vulkan 实例和设备
        vkCreateInstance(..., &instance);
        vkEnumeratePhysicalDevices(instance, &gpu_count, gpus);
        vkCreateDevice(gpus[0], ..., &device);
        vkCreateCommandPool(device, ..., &cmd_pool);
        vkAllocateCommandBuffers(device, ..., &cmd_buf);
        // 为所有参数创建 Vulkan 缓冲与内存
        for (int i = 0; i < model->n_tensor; i++) {
            VkBufferCreateInfo buf_info = {..., size: model->tensors[i].size * sizeof(float), usage: VK_BUFFER_USAGE_STORAGE_BUFFER_BIT};
            vkCreateBuffer(device, &buf_info, NULL, &model->tensors_buffer[i]);
            // 分配并绑定内存
            vkAllocateMemory(device, &mem_info, NULL, &model->tensors_memory[i]);
            vkBindBufferMemory(device, model->tensors_buffer[i], model->tensors_memory[i], 0);
            // 将模型参数拷贝到 Vulkan 缓冲
            void *data;
            vkMapMemory(device, model->tensors_memory[i], 0, buf_info.size, 0, &data);
            memcpy(data, model->tensors[i].data, buf_info.size);
            vkUnmapMemory(device, model->tensors_memory[i]);
        }
    }
    
    void ggml_vulkan_op_mul_mat(
        ggml_tensor *A_cpu, ggml_tensor *B_cpu, ggml_tensor *C_cpu) {
        // 设置 descriptor set,绑定 A, B, C 缓冲
        VkDescriptorSet desc = allocate_descriptor_set(pipeline, 3);
        vkUpdateDescriptorSet(device, desc, ... , A_buffer);
        vkUpdateDescriptorSet(device, desc, ... , B_buffer);
        vkUpdateDescriptorSet(device, desc, ... , C_buffer);
        // 记录命令到命令缓冲
        vkCmdBindPipeline(cmd_buf, VK_PIPELINE_BIND_POINT_COMPUTE, pipeline);
        vkCmdBindDescriptorSets(cmd_buf, VK_PIPELINE_BIND_POINT_COMPUTE, layout, 0, 1, &desc, 0, NULL);
        vkCmdDispatch(cmd_buf, ceil(A_rows/16), ceil(B_cols/16), 1);
        vkQueueSubmit(queue, 1, &submit_info, VK_NULL_HANDLE);
        vkQueueWaitIdle(queue);
    }
    • 初始化阶段ggml_vulkan_init() 会创建 Vulkan instance、device、command pool,并将所有参数从 CPU 内存上传到 GPU 的 Vulkan buffer。
    • 前向计算阶段ggml_vulkan_op_mul_mat() 会执行 compute shader(SPIR-V),使用 vkCmdDispatch 调度并行计算。
  4. 运行示例输出

    llama.cpp (Vulkan) v1.0.0
    model: models/7B/ggml-model-q4_0.bin
    n_threads = 4 | device: [GPU: NVIDIA GTX 1650]
    loading model from models/7B/ggml-model-q4_0.bin
    Vulkan backend enabled
    prompt: "未来的交通方式会怎样?"
    > 未来的交通方式将以自动驾驶、电动化与空中飞行器为主,形成多层次立体交通网络。...

9. 性能对比与调优建议

环境后端线程/块数模型量化时延(单次推理示例,500-token)
CPU (16 核)CPU167B FP16q4\_0\~ 5.2 s
GPU (RTX 3060)CUDA/7B FP16q4\_0\~ 0.8 s
GPU (RTX 3060)Vulkan/7B FP16q4\_0\~ 0.9 s
ARM64 CPU (Raspberry Pi 4)CPU47B FP16q4\_0\~ 25 s
  • CUDA 后端 在单卡(RTX 3060)上速度约 6–7× 快于 CPU,且推理过程 GPU 占用率较高,可继续通过 fp16/integer 等优化降低时延。
  • Vulkan 后端 在兼容多平台场景下表现也较为优秀,但稍逊于 CUDA(受限于 Shader / 驱动情况)。
  • 调优建议

    • 对于 NVIDIA GPU,尽量使用 Tensor Core 加速的 FP16 或 INT8 模型;
    • 调整 n_gpu_layers(分层 offload),将前几层参数保留在 CPU,后几层放到 GPU,避免显存爆满;
    • 对于显存不足的显卡,可使用 4-bit 量化(如 q4_0),将显存占用降低近 2×;
    • 若是多卡场景,可通过进程并行(每卡单独分配一份模型)或模型切片并行(分层分配)提升吞吐。

10. 常见问题与排查

  1. 编译失败:找不到 cublas_v2.h

    • 原因:未安装 CUDA Toolkit 或环境变量未配置。
    • 解决:检查 nvcc --version,并确保 CUDA_HOME 指向正确路径:

      export CUDA_HOME=/usr/local/cuda
      export PATH=$CUDA_HOME/bin:$PATH
      export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
    • 重新编译:make clean && make LLAMA_CUBLAS=1
  2. 运行报错:Failed to create Vulkan buffer

    • 原因:Vulkan 驱动或 SDK 未正确安装,或 GPU 不支持 Vulkan。
    • 解决:运行 vulkaninfo 检查 Vulkan 可用性;若缺少驱动,请安装厂商提供的 Vulkan 驱动。
  3. 推理时显存不足(OOM)

    • 原因:模型量化精度过高、显存不足所致。
    • 解决:将模型量化至 4-bit(q4_0),或降低批大小与 n_gpu_layers
    • 也可尝试分层 offload:

      ./llama -m models/7B/ggml-model-f16.bin -t 8 --use-cuda --n-gpu-layers 32 -p "提示词"

      --n-gpu-layers 32 表示仅将最后 32 层放在 GPU,其余在 CPU 调度。

  4. 推理结果漂移或不一致

    • 原因:量化或后端数值精度差异。
    • 解决:对比 CPU 后端与 GPU 后端输出,若偏差可接受则继续使用;否则可退回 FP16 模型或尝试更高精度量化(如 q4_1q5_0)。
  5. 性能未提升,依旧很慢

    • 原因:可能未正确启用 GPU 后端或驱动问题。
    • 排查:

      1. 确认执行命令是否包含 --use-cuda--use-vulkan
      2. 使用 nvidia-smi 查看 GPU 是否在运行时被占用。
      3. 检查 llama 输出日志是否出现 CUDA backend enabledVulkan backend enabled

11. 总结

本文全面介绍了 llama.cpp 加速器 在 GPU 上一键启动推理的流程,包括:

  1. 背景与目标:为何需要 GPU 加速以及预期效果。
  2. llama.cpp 简介:了解其轻量跨平台特性。
  3. GPU 加速原理:CUDA 与 Vulkan 两种后端的基本工作方式。
  4. 环境准备:硬件与软件依赖的安装步骤。
  5. 源码编译:演示如何启用 CUDA/Vulkan 支持并编译。
  6. 一键启动脚本:快速执行推理的 Shell 示例。
  7. 推理流程图解:Mermaid 流程图帮助理清各步骤。
  8. 详细代码示例:涵盖模型转换、CUDA 核心调用、Vulkan Shader 调用。
  9. 性能对比与调优:提供对比数据与优化建议。
  10. 常见问题与排查:帮助快速定位并解决常见错误。

通过本文,你已掌握如何将 llama.cpp 从 CPU 推理升级到 GPU 推理,仅需少量命令即可体验显著加速。后续可在此基础上继续研究:

  • 多卡并行:将模型在多张显卡间进行拆分或并行推理
  • 新量化格式:探索 3-bit、5-bit 等更极端的量化方案
  • 自定义 Kernel:针对特定硬件编写更高效的 CUDA / Vulkan shader

评论已关闭

推荐阅读

DDPG 模型解析,附Pytorch完整代码
2024年11月24日
DQN 模型解析,附Pytorch完整代码
2024年11月24日
AIGC实战——Transformer模型
2024年12月01日
Socket TCP 和 UDP 编程基础(Python)
2024年11月30日
python , tcp , udp
如何使用 ChatGPT 进行学术润色?你需要这些指令
2024年12月01日
AI
最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
2024年11月24日
ChatGPT 和 DALL·E 2 配合生成故事绘本
2024年12月01日
omegaconf,一个超强的 Python 库!
2024年11月24日
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
2024年12月01日
[超级详细]如何在深度学习训练模型过程中使用 GPU 加速
2024年11月29日
Python 物理引擎pymunk最完整教程
2024年11月27日
MediaPipe 人体姿态与手指关键点检测教程
2024年11月27日
深入了解 Taipy:Python 打造 Web 应用的全面教程
2024年11月26日
基于Transformer的时间序列预测模型
2024年11月25日
Python在金融大数据分析中的AI应用(股价分析、量化交易)实战
2024年11月25日
AIGC Gradio系列学习教程之Components
2024年12月01日
Python3 `asyncio` — 异步 I/O,事件循环和并发工具
2024年11月30日
llama-factory SFT系列教程:大模型在自定义数据集 LoRA 训练与部署
2024年12月01日
Python 多线程和多进程用法
2024年11月24日
Python socket详解,全网最全教程
2024年11月27日