license: apache-2.0
language:
- en
pipeline_tag: text-generation
tags:
- chat
InternLM3-8B-Instruct GGUF 模型
简介
internlm3-8b-instruct
模型的 GGUF 格式可通过 llama.cpp 使用,这是一个非常流行的开源大语言模型(LLM)推理框架,适用于各种硬件平台,包括本地和云端。
本仓库提供了 internlm3-8b-instruct
模型的 GGUF 格式版本,包括半精度和多种低比特量化版本,如 q5_0
、q5_k_m
、q6_k
和 q8_0
。
在接下来的部分中,我们将首先介绍安装步骤,然后说明模型下载流程。
最后,我们将通过具体示例展示模型推理和服务部署的方法。
安装
我们建议从源代码构建 llama.cpp
。以下代码片段提供了一个针对 Linux CUDA 平台的示例。其他平台的安装说明,请参考官方指南。
- 步骤 1:创建一个 conda 环境并安装 cmake
conda create --name internlm3 python=3.10 -y
conda activate internlm3
pip install cmake
git clone --depth=1 https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
cmake -B build -DGGML_CUDA=ON
cmake --build build --config Release -j
所有构建的目标文件可以在子目录 build/bin
中找到。
在接下来的部分中,我们假设工作目录位于 llama.cpp
的根目录下。
下载模型
在简介部分中,我们提到本仓库包含多个不同计算精度的模型。您可以根据需求下载合适的模型。
例如,可以按以下方式下载 internlm3-8b-instruct-fp16.gguf
:
pip install huggingface-hub
huggingface-cli download internlm/internlm3-8b-instruct-gguf internlm3-8b-instruct.gguf --local-dir . --local-dir-use-symlinks False
推理
您可以使用 llama-cli
进行推理。关于 llama-cli
的详细说明,请参考此指南
聊天示例
以下是一个使用思维系统提示的示例。
thinking_system_prompt="<|im_start|>system\n你是一位经验丰富的数学竞赛专家,擅长系统性思考和严谨推理。在解决问题时,请遵循以下思维过程:\n## 深入理解\n在尝试解答之前,花时间充分理解问题。考虑:\n- 问题的核心是什么?\n- 给定的条件及其含义是什么?\n- 是否有任何特殊限制或假设?\n- 哪些信息是关键,哪些是辅助性的?\n## 多角度分析\n在解答之前进行全面分析:\n- 涉及哪些数学概念和性质?\n- 是否能回忆起类似的经典问题或解法?\n- 是否需要图表或表格来可视化问题?\n- 是否有需要单独考虑的特殊情况?\n## 系统性思考\n规划解答路径:\n- 提出多种可能的解法\n- 分析每种方法的可行性和优缺点\n- 选择最合适的方法并解释原因\n- 将复杂问题分解为更小的可管理步骤\n## 严谨证明\n在解答过程中:\n- 为每一步提供充分的理由\n- 对关键结论提供详细证明\n- 注意逻辑连接\n- 警惕可能的疏漏\n## 反复验证\n完成解答后:\n- 验证结果是否满足所有条件\n- 检查是否有遗漏的特殊情况\n- 考虑解答是否可以优化或简化\n- 回顾推理过程\n记住:\n1. 花时间深入思考,而不是急于给出答案\n2. 严谨证明每一个关键结论\n3. 保持开放心态,尝试不同方法\n4. 总结有价值的解题方法\n5. 保持健康的怀疑态度,多次验证\n你的回答应体现深厚的数学理解和精确的逻辑思维,使你的解答路径和推理过程对他人清晰可见。\n准备好后,请提供完整的解答,包括:\n- 清晰的问题理解\n- 详细的解答过程\n- 关键见解\n- 全面验证\n专注于清晰、逻辑连贯的思路和详细的数学推理解释。用用户提问的语言提供答案,最终答案用 '\\boxed{}' 表示,不含单位,你有 [[8192]] 个标记来完成回答。\n<|im_end|>\n"
build/bin/llama-cli \
--model internlm3-8b-instruct.gguf \
--predict 2048 \
--ctx-size 8192 \
--gpu-layers 48 \
--temp 0.8 \
--top-p 0.8 \
--top-k 50 \
--seed 1024 \
--color \
--prompt "$thinking_system_prompt" \
--interactive \
--multiline-input \
--conversation \
--verbose \
--logdir workdir/logdir \
--in-prefix "<|im_start|>user\n" \
--in-suffix "<|im_end|>\n<|im_start|>assistant\n"
然后输入您的问题,例如 给定函数\(f(x)=\mathrm{e}^{x}-ax - a^{3}\),\n(1) 当 \(a = 1\) 时,求曲线 \(y = f(x)\) 在点 \((1,f(1))\) 处的切线方程。\n(2) 若 \(f(x)\) 有极小值且极小值小于 \(0\),求 \(a\) 的取值范围。
。
函数调用示例
llama-cli
示例:
build/bin/llama-cli \
--model internlm3-8b-instruct.gguf \
--predict 512 \
--ctx-size 4096 \
--gpu-layers 48 \
--temp 0.8 \
--top-p 0.8 \
--top-k 50 \
--seed 1024 \
--color \
--prompt '<|im_start|>system\n你是 InternLM-Chat,一个无害的 AI 助手。<|im_end|>\n<|im_start|>system name=<|plugin|>[{"name": "get_current_weather", "parameters": {"required": ["location"], "type": "object", "properties": {"location": {"type": "string", "description": "城市和州,例如 San Francisco, CA"}, "unit": {"type": "string"}}}, "description": "获取指定位置的当前天气"}]<|im_end|>\n<|im_start|>user\n' \
--interactive \
--multiline-input \
--conversation \
--verbose \
--in-suffix "<|im_end|>\n<|im_start|>assistant\n" \
--special
对话结果:
<s><|im_start|>system
你是 InternLM-Chat,一个无害的 AI 助手。<|im_end|>
<|im_start|>system name=<|plugin|>[{"name": "get_current_weather", "parameters": {"required": ["location"], "type": "object", "properties": {"location": {"type": "string", "description": "城市和州,例如 San Francisco, CA"}, "unit": {"type": "string"}}}, "description": "获取指定位置的当前天气"}]<|im_end|>
<|im_start|>user
> 我想知道今天上海的天气
我需要使用 get_current_weather 函数来获取上海的当前天气。<|action_start|><|plugin|>
{"name": "get_current_weather", "parameters": {"location": "Shanghai"}}<|action_end|>32
<|im_end|>
> <|im_start|>environment name=<|plugin|>\n{"temperature": 22}
上海当前的温度是 22 摄氏度。<|im_end|>
>
服务部署
llama.cpp
提供了一个兼容 OpenAI API 的服务器 - llama-server
。您可以按以下方式将 internlm3-8b-instruct.gguf
部署为服务:
./build/bin/llama-server -m ./internlm3-8b-instruct.gguf -ngl 48
在客户端,您可以通过 OpenAI API 访问该服务:
from openai import OpenAI
client = OpenAI(
api_key='YOUR_API_KEY',
base_url='http://localhost:8080/v1'
)
model_name = client.models.list().data[0].id
response = client.chat.completions.create(
model=model_name,
messages=[
{"role": "system", "content": "你是一个乐于助人的助手。"},
{"role": "user", "content": "提供三个关于时间管理的建议"},
],
temperature=0.8,
top_p=0.8
)
print(response)