RedHat-Build-LLM

如何在 Linux 服务器上搭建本地LLMs (RedHat 篇)🤔

最近因为一些原因,需要在一台 RedHat 红帽机器上配置一个 qwen2-7B 模型来进行离线大模型的使用。过程非常曲折,特此记录本次过程。

拿到服务器账号之后,我先检查了一些环境配置,个人用户缺失很多环境,好消息是 root 用户可以使用 nvcc 命令。那么我们就可以不用费劲去安装 cuda 了。

那么我首先使用个人用户安装了 Anaconda。安装过程如下:

安装完成后,配置环境变量,创建虚拟环境(这里我使用的 Python 版本是我参考的组卡平台的版本,这个版本经过测试不存在什么问题)。

1
conda create -n qwen2 python=3.10.12

启动虚拟环境时可能会遇到问题:

① 出现错误:CondaError: Run 'conda init' before 'conda activate'

② 换源问题

然后我继续向下推进:

我们切换到 qwen2 环境,正常安装相应的 modelscope 软件包。

1
pip install modelscope

目前为止一切顺利。我们需要使用 git 命令将 llama.cpp 拉到本地,因为这个服务器无法访问 GitHub,这里我们可以使用 Gitee 来进行替代。使用 Gitee 可以将 GitHub 上的仓库拉取下来:

GiteePullGithub GiteePullGithub GiteePullGithub

然后对于 Gitee 中的文件,我们使用 wget 命令下载即可。

更新 GCC

⭐⭐Linux升级gcc到最新版本gcc-11.2.0_更新gcc-CSDN博客

⭐⭐⭐Linux gcc升级全过程,过程超详细-阿里云开发者社区 (aliyun.com)

安装 Ccache

  1. 从官方网站下载 CcacheCcache — Compiler cache,我们也可以从 GitHubReleases 页面上找到较旧的版本。

  2. 使用 tar -zxvf ccache-<VERSION>-linux-x86_64.tar.xz 命令,解压 Ccache 到文件夹

  3. 较早的版本需要执行三条语句进行安装

    1
    2
    3
    ./configure
    make
    sudo make install
  4. 较新的版本提供了一键安装方式

    1
    2
    # 一般为 /usr/local/ccache-your-version_num
    make install prefix=/usr/local/ccache-4.9
  5. 配置环境变量

  6. 检查 Ccache 的版本

    1
    ccache -V

安装 MPFRGMP

安装 MPC

  1. 官网:Download — multiprecision.org

问题:

error while loading shared libraries: libmpfr.so.6: cannot open shared object file: No such file or directory 安装 libmpfr6-4.1.0-alt1.x86_64.rpm 并且将缺少的库放到 /usr/lib64 中。

下载地址:libmpfr6-4.1.0-alt1.x86_64.rpm ALT Linux P10 Download (pkgs.org)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@localhost gcc_bag]# wget https://altlinux.pkgs.org/sisyphus/classic-x86_64/libmpfr6-4.1.0-alt2.x86_64.rpm.html
[root@localhost gcc_bag]# ls
libmpfr6-4.1.0-alt2.x86_64.rpm
[root@localhost gcc_bag]# rpm2cpio libmpfr6-4.1.0-alt2.x86_64.rpm | cpio -div

[root@localhost gcc_bag]# rpm2cpio libmpfr6-4.1.0-alt2.x86_64.rpm | cpio -div
./usr/lib64/libmpfr.so.6
./usr/lib64/libmpfr.so.6.1.0
./usr/share/doc/mpfr-4.1.0
./usr/share/doc/mpfr-4.1.0/AUTHORS
./usr/share/doc/mpfr-4.1.0/BUGS
./usr/share/doc/mpfr-4.1.0/NEWS
5494 blocks

[root@localhost gcc_bag]# ls
libmpfr6-4.1.0-alt2.x86_64.rpm usr

[root@localhost gcc_bag]# mv ./usr/lib64/libmpfr.so.6 /usr/lib64/
[root@localhost gcc_bag]# mv ./usr/lib64/libmpfr.so.6.1.0 /usr/lib64/

更新 binutils,包括 ldas

binutils 镜像:Index of /gnu/binutils

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost Share]# wget http://ftp.gnu.org/gnu/binutils/binutils-2.25.1.tar.bz2  
//wget如果下载不下来就 直接浏览器访问网址下载后再解压
[root@localhost Share]# tar -xjf binutils-2.25.1.tar.bz2
[root@localhost Share]# cd binutils-2.25.1
[root@localhost binutils-2.25.1]# ./configure --prefix=/usr
[root@localhost binutils-2.25.1]# make
[root@localhost binutils-2.25.1]# make install
//安装完毕验证结果
[root@localhost binutils-2.25.1]# as --version
GNU assembler (GNU Binutils) 2.25.1
[root@localhost binutils-2.25.1]# objdump -v
GNU objdump (GNU Binutils) 2.25.1
[root@localhost binutils-2.25.1]# ld -v
GNU ld (GNU Binutils) 2.25.1

安装 nvcc

https://blog.csdn.net/bigbaojian/article/details/129642388

Linux 下的 CUDA 安装和使用指南 - 知乎 (zhihu.com)

How2Use_Stable_Diffusion

🤔 How To Use Stable Diffusion

Extension:

ChatGPT-4V

1
2
chmod u+x install_linux_mac.sh
./install_linux_mac.sh

出现错误:

ImportError: Using SOCKS proxy, but the ‘socksio’ package is not installed. Make sure to install httpx using pip install httpx[socks].

unset all_proxy && unset ALL_PROXY

Kolmogorov-Arnold Networks

Kolmogorov-Arnold Networks (KAN)

What KAN I Say ? MLP OUT !

Kolmogorov-Arnold Networks(KAN)

[TOC]

KAN 源码中的核心组件:

核心代码 主要内容
KAN.py 主要的文件,包含定义 KAN 模型的主要类和函数,定义了 KAN 模型,它由多个 KANLayerSymbolic_KANLayer 组成,包含前向传播、模式设置、符号激活函数的固定和建议、模型训练、剪枝以及可视化等功能。
KANLayer.py 定义 KAN 模型中使用的自定义层,包括模型的核心组件,如特殊的激活函数或其他处理层,是构成 KAN 的基础。
LBFGS.py 包含使用 KAN 训练的 L-BFGS 优化器的实现,用于在训练过程中对 KAN 的参数进行优化。
Symbolic_KANLayer.py 实现了一种特殊的 KAN 层,用于处理符号计算或增强模型解释性,用符号函数(如正弦)来代替传统的数值激活函数。以便深入分析和解释。
spline.py 包含实现样条函数的代码,提供一系列函数,用于处理 B 样条曲线。包括:计算 B 样条基函数、从系数生成样条曲线,以及从样条曲线估计系数等。

RSNA-2024

RSNA 2024 Lumbar Spine Degenerative Classification 腰椎退行性分类

Classify lumbar spine degenerative conditions:对腰椎退行性疾病进行分类

[TOC]

Overview 概述

The goal of this competition is to create models that can be used to aid in the detection and classification of degenerative spine conditions using lumbar spine MR images. Competitors will develop models that simulate a radiologist’s performance in diagnosing spine conditions.

本次竞赛的目标是创建可用于帮助使用腰椎 MR 图像检测和分类脊柱退行性疾病的模型。参赛者将开发模型来模拟放射科医生诊断脊柱疾病的表现。

Description 描述

Low back pain is the leading cause of disability worldwide, according to the World Health Organization, affecting 619 million people in 2020. Most people experience low back pain at some point in their lives, with the frequency increasing with age. Pain and restricted mobility are often symptoms of spondylosis, a set of degenerative spine conditions including degeneration of intervertebral discs and subsequent narrowing of the spinal canal (spinal stenosis), subarticular recesses, or neural foramen with associated compression or irritations of the nerves in the low back.

根据世界卫生组织的数据,腰痛是全球范围内导致残疾的主要原因,到 2020 年,腰痛将影响 6.19 亿人。大多数人在一生中的某个阶段都会经历腰痛,且频率随着年龄的增长而增加。疼痛和活动受限通常是脊椎病的症状,这是一组退行性脊柱疾病,包括椎间盘退变和随后的椎管变窄(椎管狭窄)、关节下隐窝或神经孔,并伴有下肢神经受压或刺激。

Magnetic resonance imaging (MRI) provides a detailed view of the lumbar spine vertebra, discs and nerves, enabling radiologists to assess the presence and severity of these conditions. Proper diagnosis and grading of these conditions help guide treatment and potential surgery to help alleviate back pain and improve overall health and quality of life for patients.

磁共振成像 (MRI) 提供腰椎、椎间盘和神经的详细视图,使放射科医生能够评估这些病症的存在和严重程度。对这些病症的正确诊断和分级有助于指导治疗和潜在的手术,以帮助减轻背痛并改善患者的整体健康和生活质量。

RSNA has teamed with the American Society of Neuroradiology (ASNR) to conduct this competition exploring whether artificial intelligence can be used to aid in the detection and classification of degenerative spine conditions using lumbar spine MR images.

RSNA 与美国神经放射学会 (ASNR)合作举办了本次竞赛,探讨人工智能是否可以利用腰椎 MR 图像来帮助检测和分类脊柱退行性疾病。

The challenge will focus on the classification of five lumbar spine degenerative conditions: Left Neural Foraminal Narrowing, Right Neural Foraminal Narrowing, Left Subarticular Stenosis, Right Subarticular Stenosis, and Spinal Canal Stenosis. For each imaging study in the dataset, we’ve provided severity scores (Normal/Mild, Moderate, or Severe) for each of the five conditions across the intervertebral disc levels L1/L2, L2/L3, L3/L4, L4/L5, and L5/S1.

挑战将集中于五种腰椎退行性疾病的分类:左神经椎间孔狭窄、右神经椎间孔狭窄、左关节下狭窄、右关节下狭窄和椎管狭窄。对于数据集中的每项影像学研究,我们为椎间盘 L1/L2、L2/L3、L3/L4、L4/L5 级别的五种情况中的每一种提供了严重性评分(正常/轻度、中度或严重)和 L5/S1。

To create the ground truth dataset, the RSNA challenge planning task force collected imaging data sourced from eight sites on five continents. This multi-institutional, expertly curated dataset promises to improve standardized classification of degenerative lumbar spine conditions and enable development of tools to automate accurate and rapid disease classification.

为了创建实况数据集,RSNA 挑战计划工作组收集了来自五大洲八个站点的成像数据。这个多机构、专业策划的数据集有望改善退行性腰椎疾病的标准化分类,并支持开发自动化准确、快速的疾病分类工具。

Challenge winners will be recognized at an event during the RSNA 2024 annual meeting. For more information on the challenge, contact RSNA Informatics staff at informatics@rsna.org.

挑战赛获胜者将在 RSNA 2024 年年会期间的活动中获得表彰。有关挑战的更多信息,请联系 RSNA 信息学工作人员: informatics@rsna.org

Evaluation 评估

Submissions are evaluated using the average of sample weighted log losses and an any_severe_spinal prediction generated by the metric. The metric notebook can be found here.

使用样本加权对数损失的平均值和由该指标生成的any_severe_spinal预测来评估提交的结果。公制笔记本可以在这里找到

The sample weights are as follows:

样本权重如下:

  • 1 for normal/mild. 1 为正常/轻度。
  • 2 for moderate. 2为中等。
  • 4 for severe. 4为严重。

For each row ID in the test set, you must predict a probability for each of the different severity levels. The file should contain a header and have the following format:

对于测试集中的每个行 ID,您必须预测每个不同严重性级别的概率。该文件应包含标头并具有以下格式:

1
2
3
4
5
row_id,normal_mild,moderate,severe
123456_left_neural_foraminal_narrowing_l1_l2,0.333,0.333,0.333
123456_left_neural_foraminal_narrowing_l2_l3,0.333,0.333,0.333
123456_left_neural_foraminal_narrowing_l3_l4,0.333,0.333,0.333
etc.
row_id normal_mild moderate severe
123456_left_neural_foraminal_narrowing_l1_l2 0.333 0.333 0.333
123456_left_neural_foraminal_narrowing_l2_l3 0.333 0.333 0.333
123456_left_neural_foraminal_narrowing_l3_l4 0.333 0.333 0.333
etc.

In rare cases the lowest vertebrae aren’t visible in the imagery. You still need to make predictions (nulls will cause errors), but those rows will not be scored.

在极少数情况下,图像中看不到最低的椎骨。您仍然需要进行预测(空值会导致错误),但这些行不会被评分。

For this competition, the any_severe_scalar has been set to 1.0.

对于本次比赛,any_severe_scalar已设置为1.0

Dataset Description 数据集描述

The goal of this competition is to identify medical conditions affecting the lumbar spine in MRI scans.
本次比赛的目标是通过 MRI 扫描识别影响腰椎的医疗状况。

This competition uses a hidden test. When your submitted notebook is scored, the actual test data (including a full length sample submission) will be made available to your notebook.
本次比赛采用隐藏测试方式。当您提交的笔记本电脑被评分时,实际的测试数据(包括完整长度的样本提交)将提供给您的笔记本电脑。

Files 文件

train.csv Labels for the train set. 训练集的标签。

  • study_id - The study ID. Each study may include multiple series of images.
    study_id - 研究 ID,每个研究可能包括多个系列的图像。
  • [condition]_[level] - The target labels, such as spinal_canal_stenosis_l1_l2 , with the severity levels of Normal/Mild, Moderate , or Severe . Some entries have incomplete labels.
    [condition]_[level] - 目标标签,例如spinal_canal_stenosis_l1_l2 ,严重程度级别为 Normal/MildModerateSevere。有些条目的标签不完整。

train_label_coordinates.csv
训练标签坐标.csv

  • study_id
  • series_id - The imagery series ID.
    series_id - 图像系列 ID。
  • instance_number - The image’s order number within the 3D stack.
    instance_number - 图像在 3D 堆栈中的顺序号。
  • condition - There are three core conditions: spinal canal stenosis, neural_foraminal_narrowing, and subarticular_stenosis. The latter two are considered for each side of the spine.
    condition - 共有三种核心病症:椎管狭窄、神经椎间孔狭窄和关节下狭窄。脊柱的每一侧都考虑后两者。
  • level - The relevant vertebrae, such as l3_l4
    level - 相关椎骨,例如l3_l4
  • [x/y] - The x/y coordinates for the center of the area that defined the label.
    [x/y] - 定义标签的区域中心的 x/y 坐标。

sample_submission.csv 样本提交.csv

  • row_id - A slug of the study ID, condition, and level such as 12345_spinal_canal_stenosis_l3_l4.
    row_id - 研究 ID、条件和级别的 slug,例如12345_spinal_canal_stenosis_l3_l4
  • [normal_mild/moderate/severe] - The three prediction columns.
    [normal_mild/moderate/severe] - 三个预测列。

[train/test]_images/[study_id]/[series_id]/[instance_number].dcm The imagery data.图像数据。

[train/test]_series_descriptions.csv

  • study_id

  • series_id

  • series_description The scan’s orientation.
    series_description 扫描方向。

方案说明

Transformer + KAN 6.09 结果很不好

Deploy_LLMs_ON_Linux

如何在 Linux 服务器上搭建本地LLMs 🤔

如何在 Linux 服务器上部署大语言模型,以 qwen1_5-32b-chat-q8_k_0 为例。服务器使用显卡 A4000,预算:$5950$ 元。

搭建 qwen1_5-32b-chat-q8_k_0

  1. 下载 🤗Hugging Face 库,这个库主要是用于下载模型使用。当然为了保证速度,我们可以使用 wget 命令替代他。如果你决定使用 wget 命令,你可以选择跳过这一步,具体的使用方式在第五步呈现。

    1
    (base) ➜  ~ pip install huggingface_hub

    或者是直接下载 modelscope 库,使用 modelscope 下载模型(⭐推荐)。

    1
    (base) ➜  ~ pip install modelscope
  2. 创建一个 LocalGit 文件夹,并进入该文件夹

    1
    2
    3
    (base) ➜  ~ mkdir LocalGit
    (base) ➜ ~ cd LocalGit
    (base) ➜ LocalGit
  3. 克隆 llama.cpp 的仓库

    1
    2
    3
    (base) ➜  LocalGit git clone https://github.com/ggerganov/llama.cpp
    (base) ➜ LocalGit cd llama.cpp
    (base) ➜ llama.cpp git:(master)
  4. 在有 GPU 的环境下编译 llama.cpp

    前置条件:安装 nvcc + cmake

    执行代码进行编译:

    1
    (base) ➜  llama.cpp git:(master) make LLAMA_CUBLAS=1 LLAMA_CUDA_NVCC=/usr/local/cuda/bin/nvcc

    如果出现错误:(base) ➜ llama.cpp git:(master) make LLAMA_CUBLAS=1 LLAMA_CUDA_NVCC=/usr/local/cuda/bin/nvcc Makefile:76: *** LLAMA_CUBLAS is removed. Use GGML_CUDA instead.. Stop.

    修改代码如下:

    1
    (base) ➜  llama.cpp git:(master) make GGML_CUDA=1 LLAMA_CUDA_NVCC=/usr/local/cuda/bin/nvcc

    为了加快编译速度,我们可以尝试以下命令添加参数 jj 后面的数字表示同时编译的线程数(可根据 CPU 核数决定),实测能缩短约 $1/3$ 的时间:

    1
    (base) ➜  llama.cpp git:(master) make -j6 GGML_CUDA=1 LLAMA_CUDA_NVCC=/usr/local/cuda/bin/nvcc
  5. 下载相应的模型

    ① 使用 Hugging Face 下载相应模型,实测服务器网速在 3M~6M 左右,具体方式如下:

    1
    (base) ➜  ~ huggingface-cli download Qwen/Qwen1.5-32B-Chat-GGUF qwen1_5-32b-chat-q8_0.gguf --local-dir . --local-dir-use-symlinks False

    ② 使用 wget 下载 modelscope 的模型文件,实测网速在 10M~22M 左右,这需要你先获取到模型的下载链接,具体方式如下:

    1
    (base) ➜  ~ wget https://www.modelscope.cn/models/qwen/Qwen1.5-32B-Chat-GGUF/resolve/master/qwen1_5-32b-chat-q8_0.gguf

    ③ 直接使用 modelscope 库下载模型,实测网速在 18M~65M 左右,具体方式如下:

    1
    2
    3
    4
    (base) ➜  ~ cd LocalGit 
    (base) ➜ LocalGit mkdir models
    (base) ➜ LocalGit cd models
    (base) ➜ models modelscope download --model=qwen/Qwen2-7B-Instruct-GGUF --local_dir . qwen2-7b-instruct-q8_0.gguf
  6. 使用 llama.cpp 的相关命令进行操作

    1
    (base) ➜  llama.cpp git:(master) ./main -m ../models/qwen1_5-32b-chat-q8_0.gguf -n 512 --color -i -cml -f prompts/chat-with-qwen.txt
    1
    (base) ➜  llama.cpp git:(master) ./llama-server -m ../models/qwen1_5-32b-chat-q8_0.gguf -ngl 80 -fa

    如果是 Qwen2-7B-Instruct-GGUF,可以参考官方文档:Qwen2-7B-Instruct-GGUF · 模型库 — Qwen2-7B-Instruct-GGUF · 模型库 (modelscope.cn)

    1
    (base) ➜  llama.cpp git:(master) ./llama-server -m ../models/qwen2-7b-instruct-q8_0.gguf -ngl 29 -fa
  7. 兼容 OpenAI API,使用 Python 代码测试

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import openai

    client = openai.OpenAI(
    base_url="http://localhost:8080/v1", # "http://<Your api-server IP>:port"
    api_key = "sk-no-key-required"
    )

    completion = client.chat.completions.create(
    model="qwen",
    messages=[
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "tell me something about michael jordan"}
    ]
    )
    print(completion.choices[0].message.content)
  8. 命令启动

    1
    2
    3
    4
    5
    ./llama-cli -m qwen2-7b-instruct-q5_k_m.gguf \
    -n 512 -co -i -if -f prompts/chat-with-qwen.txt \
    --in-prefix "<|im_start|>user\n" \
    --in-suffix "<|im_end|>\n<|im_start|>assistant\n" \
    -ngl 24 -fa

拓展补充

Llama.cpp大模型量化简明手册_llamacpp量化-CSDN博客

【Llama2 windows部署详细教程】第二节:llama.cpp成功在windows上编译的秘诀_llama cpp 编译-CSDN博客

Windows Build llama.cpp

Windows 平台下构建 llama.cpp

在使用 LM-Studio 时,对于一些参数量不是很大的模型来说,大多数不需要进行模型的合并,如 qwen2-7b 等。这些模型往往只需要下载后加载到 LM-Studio 中即可。

但是对于参数量很大的模型,如 qwen2-72b-instruct 等,因为模型文件较大不利于传输,因此模型开发者可能会使用 llama.cppGGUF 模型进行拆分,所以这个时候我们在下载模型时就需要进行模型的合并。

qwen2-72b-instructq8 量化给出了两个模型文件,分别是:

1
2
qwen2-72b-instruct-q8_k_m-00001-of-00002.gguf
qwen2-72b-instruct-q8_k_m-00002-of-00002.gguf

为了使用这些分割后的 GGUF 文件,我们可以使用 llama-gguf-split 合并他们

1
llama-gguf-spilt --merge input.gguf output.gguf

Deploy_LLMs_ON_PC

如何搭建运行在本地的 LLMs 🤔

[TOC]

🤗 1. 基于 LM-Studio

  1. 访问 LM-Studio,网址:LM Studio - Discover, download, and run local LLMs

    下载对应系统的安装包,然后双击运行即可。

  1. 访问 ModelScope魔搭社区 或者 🤗Hugging FaceHugging Face,这里以 ModelScope 为例,进入模型库,下载相应模型。
魔搭社区官网
找到需要的模型并下载
  1. 下载好响应的模型后,将模型组织好,放到相应的文件夹中,这里按照 models/Publisher/Repository/*.gguf 的路径组织模型路径,然后选择 Change 更改模型的位置。如果不按照该路径组织,则会出现 You have 1 uncategorized model files. 错误,如下图所示:
  1. 但是那种方式是不太推荐的,我们组织 USER/MODEL_NAME/*.gguf 的结构,这种结构会比较明了:
  1. 完成模型文件的下载和组织后,我们可以进入聊天页面,选择模型进行加载。这里为了节约空间,我删除了 nilera/Qwen1.5-7B-Chat-Q4-GGUF 目录下的文件。
  1. 选择模型加载,等待加载完成即可像平时使用其他大模型的时候一样使用这些模型。
  1. 但是如果我们想在代码中使用我们的大模型应该怎么做呢?我们可以选择 LM-StudioLocal Server 菜单项,选择 Start Server 即可部署到一个本地指定的端口(默认是 1234)。
  1. 右侧有许多样例,我们可以选择一段样例,如:chat(python),这里对这段代码进行简单的解释。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Example: reuse your existing OpenAI setup
from openai import OpenAI

# Point to the local server
client = OpenAI(base_url="http://localhost:1234/v1", api_key="lm-studio")

completion = client.chat.completions.create(
model="Publisher/Repository", # 可以理解为模型路径, 这里以启动在这个端口的模型为准
messages=[
{"role": "system", "content": "Always answer in Chinese."}, # 系统设置: 每次都用中文回答
{"role": "user", "content": "Introduce yourself."} # 对话设置: 这里希望 AI 介绍一下他自己
],
temperature=0.7,
)

print(completion.choices[0].message) # 获取模型的回复
  1. 然后我们就可以愉快的使用 Python 调用我们的本地大模型了。

⛵ 2. 使用 PowerInfer 框架

PowerInfer 框架 GitHub 链接:SJTU-IPADS/PowerInfer: High-speed Large Language Model Serving on PCs with Consumer-grade GPUs (github.com)

$2024$ 年发布论文 PowerInfer-2[2406.06282] PowerInfer-2: Fast Large Language Model Inference on a Smartphone (arxiv.org)

Anaconda 命令使用:【anaconda】conda创建、查看、删除虚拟环境(anaconda命令集)_conda 创建环境-CSDN博客

参考博客:大模型笔记之-3090显卡推理70B参数模型|基于PowerInfer 一个 CPU/GPU LLM 推理引擎-CSDN博客

  1. 使用 Conda 创建环境,这里 Python 版本需要大于 3.8
1
conda create -n powerinfer1 python=3.8
  1. 激活 Conda 环境:
1
conda activate powerinfer1
  1. 克隆 PowerInfer 框架代码:
1
git clone git@github.com:SJTU-IPADS/PowerInfer.git
  1. 安装所需依赖:
1
pip install -r requirements.txt
  1. 使用 CMake 进行编译(CMake 版本需要大于:3.17+

    这里很大概率可能会出现编译器版本与 CUDA 版本不一致的情况,解决方案:fatal error C1189: #error: – unsupported Microsoft Visual Studio version! - CSDN博客

    这里我有三个 CUDA 版本,貌似修改其中任意一个就可以,这里我修改的是 CUDA v11.6 版本。

    ① 如果是 NVIDIA GPUs,需要使用如下方式进行编译:

    1
    2
    cmake -S . -B build -DLLAMA_CUBLAS=ON
    cmake --build build --config Release

    ② 如果是 AMD GPUs,需要使用下面的方式进行编译:

    1
    2
    3
    4
    # Replace '1100' to your card architecture name, you can get it by rocminfo
    CC=/opt/rocm/llvm/bin/clang CXX=/opt/rocm/llvm/bin/clang++ cmake -S . -B build -
    DLLAMA_HIPBLAS=ON -DAMDGPU_TARGETS=gfx1100
    cmake --build build --config Release

    ③ 如果是 CPU ONLY,需要使用下面的方式进行编译:

    1
    2
    cmake -S . -B build
    cmake --build build --config Release

    这里我有一块 Nvidia 1050ti 所以我使用方式 ①进行编译。

  2. 对于我们下载的模型,可以使用提供的方式进行转化,转化为 PowerInfer 可以使用的类型:

1
2
3
# make sure that you have done `pip install -r requirements.txt`
python convert.py --outfile /PATH/TO/POWERINFER/GGUF/REPO/MODELNAME.powerinfer.gguf /PATH/TO/ORIGINAL/MODEL /PATH/TO/PREDICTOR
# python convert.py --outfile ./ReluLLaMA-70B-PowerInfer-GGUF/llama-70b-relu.powerinfer.gguf ./SparseLLM/ReluLLaMA-70B ./PowerInfer/ReluLLaMA-70B-Predictor
1
python convert.py --outfile D:/LMStudio/models/Publisher/Repository/qwen1_5-7b-chat-q4_0.gguf ./SparseLLM/ReluLLaMA-70B ./PowerInfer/ReluLLaMA-70B-Predictor
  1. 或者将要 原始模型转化为 GGUF 模型
1
python convert-dense.py --outfile /PATH/TO/DENSE/GGUF/REPO/MODELNAME.gguf /PATH/TO/ORIGINAL/MODEL
  1. 运行模型
1
2
3
./build/bin/Release/main.exe -m C:/Users/NilEra/Downloads/llama-7b-relu.powerinfer.gguf -n 128 -t 2 -p "Once upon a time"

# 其中/home/user/data/ReluLLaMA-70B-PowerInfer-GGUF/llama-70b-relu.q4.powerinfer.gguf为GPTQ量化过的模型文件
  1. 一些问题:

Issus22

🔧 3. 在 Windows 上搭建 llama.cpp

  1. 在 Windows 上搭建 llama.cpp 是需要安装很多工具,且安装完成后也存在无法正常成功编译的情况(存在依赖、库等各种问题),因此这里我们可以使用 w64devkit 工具,使用他可以方便我们进行 llama.cpp 的编译。首先我们先下载 w64devkit

    参考网址01

    参考网址02

  2. 然后再 make 可以了

LLM_General_Education

🤗 大语言模型通识

大语言模型的配置需求

首先要搞清楚,本地可以部署什么大模型,取决于个人电脑的硬件配置,尤其需要关注 GPU 的显存。一般来说,只要本地机器 GPU 的显存能够满足大模型的要求,那基本上都可以本地部署。

那么大模型类别这么多,有 $7B$、$13B$、$70B$ 等等,GPU 显存如何准备呢?

在没有考虑任何模型量化技术的前提下,有公式如下:
$$
GB = B × 2
$$

其中为 $GB$ 模型显存占用,$B$ 为大模型参数量。

参考资料

AI大模型本地化部署Q/A硬件篇

如何找到最新的大模型、如何判断本地硬件是否满足大模型需求、如何快速部署大模型

大模型综合评测对比 | 当前主流大模型在各评测数据集上的表现总榜单 | 数据学习 (DataLearner)