do_sample=True 参数
do_sample=True 参数控制模型生成文本时是否使用采样策略。简单来说,它决定了在生成下一个词时,是根据概率分布随机选择(即采样),还是总是选择概率最高的词(贪心解码)。
当 do_sample=True 时,模型会在预测出的概率分布中随机选择下一个词,这样可以生成更加多样化和富有创意的文本,适合于聊天机器人或创意写作等场景,避免生成重复的内容。如果 do_sample=False,模型会总是选择概率最高的词,输出会更加确定性,但可能会导致文本单调或重复。
采样可以配合其他参数使用,例如 temperature 和 top_k,来进一步控制生成的多样性。
开源的企业资源规划 (ERP) 软件
开源的企业数据录入系统有很多,以下是一些流行的开源选项:
1. Odoo:
* Odoo是一个全面的ERP系统,它包括一个强大的数据录入模块,适用于各种业务需求。
2. OpenERP:
* OpenERP(现在称为Odoo)是一个开源的企业资源规划(ERP)和客户关系管理(CRM)软件。
3. Dolibarr:
* Dolibarr是一个开源的ERP和CRM软件,适用于中小企业。
4. Compiere:
* Compiere是一个开源的企业资源规划(ERP)和客户关系管理(CRM)软件。
5. ERP5:
* ERP5是一个开源的ERP系统,它支持多种业务流程。
6. Openbravo:
* Openbravo是一个开源的ERP和CRM软件,适用于各种规模的企业。
7. Tryton:
* Tryton是一个开源的ERP系统,它支持多种语言和数据库。
8. Kuali Financial System:
* Kuali是一个开源的财务系统,适用于高等教育机构。
9. Apache OFBiz:
* Apache OFBiz是一个开源的企业级应用框架和业务应用程序。
10. CiviCRM:
* CiviCRM是一个开源的CRM系统,专为非营利组织设计。
选择合适的开源企业数据录入系统时,需要考虑以下因素:
* 业务需求:确保所选系统满足您的业务需求。
* 可扩展性:选择一个可扩展的系统,以便随着业务增长而扩展。
* 社区支持:一个活跃的社区可以提供技术支持和最佳实践。
* 安全性:选择一个安全可靠的开源系统,以保护您的数据。
在选择开源系统时,建议您进行充分的研究和评估,以确保它符合您的业务需求。
fastapi HTTP 422 Unprocessable Entity
HTTP 422 Unprocessable Entity 错误通常表示服务器能够理解请求,但请求中的某些数据格式不正确,导致无法处理该请求。在 FastAPI 中,422 Unprocessable Entity 错误可能与请求体中的数据类型或格式不符合预期有关。
常见原因
1. 请求体格式错误:发送的 POST 请求的数据格式可能与 FastAPI 期望的格式不同,例如,传递的数据未被正确地序列化为 JSON,或者字段不匹配。
2. 缺少必填字段:FastAPI 的请求体模型可能定义了某些必填字段,但你在请求中没有传递这些字段。
3. 字段类型不匹配:某些字段的数据类型与 FastAPI 定义的类型不一致。
如何排查
1. 日志和错误信息:查看 FastAPI 提供的详细错误日志信息,通常它会明确指出哪个字段出现了问题。
2. 校验数据类型:确保传递的数据类型与预期的数据类型相匹配。如果 message 期望是 str,但你传递了其他类型的数据(如 int),FastAPI 会返回 422 错误。
检查请求格式:确保发送的请求体数据格式正确,通常是 JSON 格式,例如:
{
"message": "你好"
}
如果你是用 curl 或其他工具发送请求,可以类似这样发送:
curl -X POST "http://localhost:8000/chat" -H "Content-Type: application/json" -d '{"message": "你好"}'
查看 FastAPI 中的请求体模型定义:检查你在 FastAPI 中定义的 /chat 端点是否有特定的 Pydantic 模型,看看哪些字段是必填字段,哪些字段是可选的。
from pydantic import BaseModel
class ChatRequest(BaseModel):
message: str # 假设你需要传递一个 `message` 字段
@app.post("/chat")
async def chat(request: ChatRequest):
return {"response": "Message received"}
例子
假设你的 /chat 端点期望一个 JSON 对象:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class ChatRequest(BaseModel):
message: str
@app.post("/chat")
async def chat(request: ChatRequest):
return {"response": f"Received: {request.message}"}
如果你发送以下不正确的请求:
curl -X POST "http://localhost:8000/chat" -H "Content-Type: application/json" -d '{"msg": "你好"}'
它会返回 422 Unprocessable Entity,因为 msg 字段不符合 message 的字段名要求。
如何修正
* 确保在请求体中使用正确的字段名称和类型。
* 对于可选字段,定义时使用 Optional 类型。
* 查看 FastAPI 返回的详细错误消息,找出具体哪个字段存在问题。
python lazyvim自动格式化
在使用 LazyVim(Neovim 的 Lazy 配置)时,自动格式化 Python 代码可以通过设置 null-ls 插件并结合 Python 格式化工具(如 black、isort 等)来实现。
下面是配置 LazyVim 自动格式化 Python 的步骤:
1. 安装 Python 格式化工具
首先,确保你已经安装了 Python 格式化工具,比如 black 和 isort。
pip install black isort
2. 配置 LazyVim
LazyVim 使用 null-ls 来集成格式化工具。你需要在 LazyVim 的配置文件中配置 Python 文件的自动格式化。
打开 ~/.config/nvim/lua/plugins/null-ls.lua(或者你的 LazyVim 配置路径),并进行以下修改:
return {
"jose-elias-alvarez/null-ls.nvim",
opts = function(_, opts)
local nls = require("null-ls")
-- 确保 opts.sources 是一个表
opts.sources = opts.sources or {}
-- 添加 black 和 isort 作为格式化工具
opts.sources = vim.list_extend(opts.sources, {
nls.builtins.formatting.black,
nls.builtins.formatting.isort,
})
end,
}
这会将 black 和 isort 作为 Python 的格式化工具加载到 null-ls 中。
3. 配置自动格式化
为了让 LazyVim 自动格式化 Python 文件,你可以通过以下方式设置保存时自动格式化。
在 ~/.config/nvim/init.lua 中添加:
-- 在保存时自动格式化
vim.api.nvim_create_autocmd("BufWritePre", {
pattern = "*.py",
callback = function()
vim.lsp.buf.format({ async = false })
end,
})
这样,每次保存 .py 文件时,LazyVim 就会自动调用 black 和 isort 进行格式化。
4. 测试自动格式化
重新启动 Neovim 并打开一个 Python 文件,编辑后保存,观察是否会自动格式化代码。如果配置正确,代码应该会自动按照 black 和 isort 的规范进行格式化。
额外工具
你可以根据需要安装其他 Python 格式化工具,如 flake8 或 autopep8,并按上述方式在 null-ls 中配置。
开发AI,3090和4080显卡,是否显存高的优先?
对于开发AI来说,显存的大小确实是一个重要的考量因素,但是不能一概而论地说显存高的就一定优先。
需要综合考虑以下因素:
* 模型大小: 你训练的模型大小决定了所需的显存容量。如果模型很大,显存容量不足会导致模型无法完全加载到显存中,从而影响训练速度和效率。
* 训练数据量: 数据量越大,显存需求也会越高。
* 训练批次大小: 训练批次大小是指每次训练使用的样本数量,批次大小越大,显存需求也越高。
* 其他应用程序需求: 除了AI开发,你可能还会使用显卡进行其他任务,例如游戏、视频渲染等。这些任务也会占用显存。
3090和4080显卡的对比:
| 特性 | 3090 | 4080 ||---|---|---|| 显存容量 | 24GB | 16GB || 计算性能 | 较低 | 较高 || 价格 | 较高 | 较高 |
总结:
* 如果你的AI模型较大,训练数据量大,并且需要较高的训练批次大小,那么3090的24GB显存可能更合适。
* 如果你的AI模型较小,训练数据量较少,并且不需要非常高的训练速度,那么4080的16GB显存可能已经足够。
最终选择需要根据你的实际需求来决定。
GLM-4介绍
GLM-4:下一代大规模语言模型的崛起
随着人工智能技术的不断发展,大规模语言模型(Large Language Models, LLMs)在自然语言处理领域发挥着越来越重要的作用。近年来,许多知名的LLM,如OpenAI的GPT系列和Google的LaMDA,都展示了强大的语言理解与生成能力。而在这些模型中,GLM-4(General Language Model 4)作为新一代的创新模型,备受瞩目。
什么是GLM-4?
GLM-4是由一组顶尖的AI研究人员开发的最新语言模型,它基于深度学习和大规模并行计算技术,旨在解决多种复杂的自然语言处理任务。GLM系列模型起源于通用语言建模的理念,旨在通过更具泛化能力的架构来处理多语言、多任务以及跨领域的内容生成与理解需求。
GLM-4在前几代模型的基础上,进一步提升了模型的架构和训练规模,具备更强的上下文理解能力和语言生成流畅性。这使其在文本生成、机器翻译、语义分析、对话系统等应用场景中表现出色。
GLM-4的关键特性
1. 更大规模的参数:GLM-4相比于之前的版本,拥有更多的参数,这意味着它能更好地捕捉复杂的语义关系与语言模式。大规模的参数使得模型可以在多种任务中展现出更好的性能。
2. 多语言支持:GLM-4不仅仅局限于英语,它在多个语言数据集上进行了训练,能够处理和生成不同语言的文本。这使得它在全球化的应用场景中具有广泛的适用性。
3. 跨领域的泛化能力:得益于多任务学习框架,GLM-4不仅能够应对特定的自然语言处理任务,如问答、摘要生成等,还可以扩展到医疗、法律、金融等领域的专门任务。模型的多样化训练使其具有很好的跨领域应用潜力。
4. 更强的上下文理解:GLM-4在处理长文本时表现尤为出色,能够通过自注意力机制捕捉远距离的上下文信息,从而生成更具连贯性和一致性的文本。
5. 高效推理与生成:尽管GLM-4的模型规模巨大,但研究团队通过优化算法和架构设计,显著提高了模型的推理效率,使得它在实际应用中具有较快的响应速度,适用于实时交互场景。
GLM-4的应用场景
1. 智能客服:GLM-4可以集成到智能客服系统中,通过自然语言对话帮助用户解答问题,提高服务效率。
2. 内容创作:借助GLM-4的强大生成能力,用户可以通过简单的指令生成高质量的文章、报告、小说等内容,极大提升内容创作的效率。
3. 机器翻译:多语言支持使得GLM-4在机器翻译任务中具有显著优势,可以为不同语言之间的无缝沟通提供解决方案。
4. 语义搜索:GLM-4能够通过理解用户的自然语言查询,提供更精准和相关的搜索结果,优化搜索引擎和知识库系统。
5. 医疗、法律等专业领域应用:GLM-4具备处理专业术语和复杂信息的能力,能够在特定领域中进行知识提取和文本生成,为医生、律师等专业人士提供辅助支持。
GLM-4的未来
尽管GLM-4已经展现了强大的能力,但未来的发展仍然充满机遇和挑战。随着硬件计算能力的不断提升和数据资源的不断丰富,未来的语言模型将能够解决更复杂的问题,甚至可能跨越语言的界限,成为人类与机器之间无缝沟通的桥梁。
GLM-4无疑是大规模语言模型发展历程中的重要一步。它的多语言支持、强大的上下文理解和生成能力为未来的人工智能应用奠定了坚实的基础。在不断扩展的AI世界中,GLM-4将继续推动自然语言处理领域的创新与变革。
总结来说,GLM-4不仅仅是一个技术进步的象征,它也是AI技术如何影响和改变我们日常生活的重要体现。随着其不断应用于更多领域,GLM-4将有望为各行业带来更高效、更智能的解决方案。
ubuntu MiniCPM 3.0 vLLM 安装
安装python环境
ubuntu 安装python3在 Ubuntu 上安装 Python 3 非常简单,通常 Python 3 是预装的。如果需要安装或更新它,可以按照以下步骤操作: 1. 更新包管理器 首先,确保你的系统软件包是最新的: sudo apt update
sudo apt upgrade 2. 安装 Python 3 使用以下命令安装 Python 3: sudo apt install python3 3. 安装 pip3(Python 3 的包管理工具) 为了安装 Python 包,可以安装 pip3: sudo apt install python3-pip 4. 验证安装DDai’s Docs胸口碎大石
狗东西,文档都没有,各种版本不兼容错误。
等有心情了再回头来写吧
模型介绍
MiniCPM 3.0 效果比肩甚至超越众多 7B-9B 模型MiniCPM 3.0 是一个 4B 参数量的语言模型,相比 MiniCPM1.0/2.0,功能更加全面,综合能力大幅提升,多数评测集上的效果比肩甚至超越众多 7B-9B 模型。 * 支持工具调用🛠️(Function Calling)和代码解释器💻(Code Interpreter):Berkeley Function Calling Leaderboard (BFCL) 上取得 9B 规模以下 SOTA,超越 GLM-4-9B-Chat、Qwen2-7B-Instruct。 * 超强的推理能力🧮:数学能力方面,MathBench 上的效果超越 GPT-3.5-Turbo 以及多个 7B-9B 模型。在非常具有挑战性的 LiveCodeBench 上,效果超越 Llama3.1-8B-Instruct。 * 出色的中英文指令遵循能力�DDai’s Docs胸口碎大石
vLLM和transformers的详细对比
vLLM 和 Hugging Face 的 Transformers 库是用于自然语言处理(NLP)的大型语言模型(Large Language Models, LLM)框架,它们各自有不同的设计目标和特点。以下是两者的详细对比:
1. 目标和用途
* vLLM:vLLM 是为优化 LLM 的推理性能而设计的框架,特别是处理大规模模型的高效推理。它专注于通过增强内存管理、优化并发执行、减少延迟等来提升性能,适合需要处理高吞吐量任务的应用场景,例如 API 服务或需要快速响应的系统。
* Transformers:Hugging Face 的 Transformers 是一个通用的 NLP 框架,广泛支持多种预训练模型和任务。它不仅支持推理,还包括训练、微调和推理的完整支持,适用于研究、生产环境和快速开发。
2. 架构设计
* vLLM:
* 专注于推理(Inference)优化。
* 提供高效的 分片内存管理 (PagedAttention) 技术,通过优化 GPU 和 CPU 之间的内存传输,减少内存消耗,使得可以在更少的资源下推理大型模型。
* 更好的异步并发执行模型,支持批量推理和更高的推理吞吐量。
* Transformers:
* 通用 NLP 框架,支持训练、微调和推理。
* 提供了丰富的模型支持(BERT, GPT, T5, RoBERTa 等)和任务(文本分类、机器翻译、文本生成等)。
* 灵活的接口设计,支持多种深度学习框架(如 TensorFlow、PyTorch、Flax)。
* Hugging Face Hub 提供大量预训练模型,易于使用和集成。
3. 性能和优化
* vLLM:
* PagedAttention 技术允许更高效地在有限内存中处理大模型(如 GPT-3 级别模型)。
* 针对推理的性能优化,使得 vLLM 特别适合需要处理高并发请求的场景。
* 提供更高的推理吞吐量和更低的延迟,尤其在批量请求中表现优异。
* Transformers:
* 提供了广泛的微调和训练优化工具,但在推理优化方面相对没有 vLLM 针对性强。
* 可通过集成其他工具(如 ONNX、TensorRT)优化推理性能,但这需要额外的设置和配置。
* 支持分布式训练和推理,适合大规模训练和模型扩展,但推理性能可能不如 vLLM 专门优化的那样出色。
4. 模型支持
* vLLM:
* 专注于 GPT 类别的大模型,特别是处理高效的语言生成任务。
* 主要支持的模型是基于自回归生成模型,适用于像 GPT-3 这样的大型语言模型。
* Transformers:
* 支持数百种模型架构,包括 BERT、GPT、T5、BART 等流行的预训练模型。
* 适合更多任务类型,包括文本生成、文本分类、序列标注、机器翻译等。
5. 易用性和生态系统
* vLLM:
* 专为推理任务设计,提供简洁的 API,方便集成到高性能推理系统中。
* 针对服务场景的性能优化,使其在处理多用户并发请求时有极大优势。
* 生态系统相对较新,主要是围绕高效推理进行开发,社区和工具链相对较小。
* Transformers:
* 拥有庞大的社区支持和丰富的生态系统,特别是 Hugging Face Hub 提供了开箱即用的预训练模型。
* 与 Hugging Face 的 Datasets、Tokenizers 等工具深度集成,支持端到端的 NLP 项目开发。
* 适用于广泛的研究和应用场景,社区和文档支持非常全面。
6. 使用场景
* vLLM:
* 适合需要高吞吐量、低延迟的推理任务,比如 AI 服务、聊天机器人 API、生产级推理服务等。
* 在资源有限的情况下推理超大模型(如 GPT-3 级别模型)。
* Transformers:
* 适合从研究到生产的完整 NLP 任务,包括模型训练、微调、推理等。
* 适合需要快速迭代开发、实验和部署的团队。
7. 扩展性和分布式支持
* vLLM:
* 主要优化单机多 GPU 环境的推理性能,但也有一定的分布式扩展能力。
* Transformers:
* 支持分布式训练和推理,通过像 DeepSpeed 和 PyTorch 的分布式库来扩展模型训练和推理。
* 可以运行在多 GPU、TPU 以及云环境中,支持跨设备并行计算。
总结
特性
vLLM
Transformers
主要用途
高效推理、大模型推理
通用 NLP 任务,训练、微调和推理
性能优化
内存和并发优化,低延迟、高吞吐量
依赖外部工具进行推理优化
模型支持
主要支持 GPT 类生成模型
支持多种模型架构和任务类型
易用性
针对推理简化 API,适合生产环境
丰富的社区支持,广泛的文档和教程
扩展性
单机多 GPU 优化,有限的分布式支持
强大的分布式支持,适合大规模训练和推理
两者的选择取决于具体的应用需求。如果你主要关注高效推理和部署 vLLM 是更好的选择,而如果你需要支持各种 NLP 任务并且进行研究或快速原型开发,Transformers 可能是更合适的选择。
性能差距大概多少?
vLLM 和 Hugging Face Transformers 框架之间的性能差距主要体现在推理性能,尤其是在处理大型语言模型(LLM)的高吞吐量和低延迟需求上。以下是两者在推理性能方面的具体差异:
1. 推理延迟
* vLLM:vLLM 针对推理延迟进行了专门优化,使用了 PagedAttention 技术,这种机制能够显著减少内存占用,并提升在大型模型推理时的效率。对于高并发的请求,vLLM 可以保持较低的延迟,尤其是当需要处理大量批量请求时。
* 延迟差异:在某些测试中,vLLM 能将推理延迟降低 30% 到 50%,尤其是在高并发负载下。
* Transformers:Transformers 的推理时间相对较高,特别是在处理非常大的模型时。虽然 Hugging Face 可以通过集成工具(如 ONNX、TensorRT)来提升推理速度,但这些优化需要额外的配置和调整。
* 典型表现:在未进行深度优化的情况下,Transformers 的推理延迟可能会比 vLLM 高出 50% 或更多,尤其是在处理大规模并发请求时。
2. 吞吐量
* vLLM:vLLM 的架构设计使得它可以处理大量并发请求,并且吞吐量随模型大小的增长表现出较好的线性扩展。由于更高效的 GPU 内存管理和并发执行,它能够在单机或多 GPU 环境中处理比 Transformers 框架更多的推理任务。
* 吞吐量差异:vLLM 在高负载下的吞吐量通常比 Transformers 高出 2 倍到 5 倍,特别是在需要处理批量请求的场景中。
* Transformers:尽管 Transformers 框架提供了广泛的模型支持,但在推理过程中,由于缺乏特定的并发优化,处理大规模模型或并发请求的吞吐量表现可能不如 vLLM。
* 典型表现:在推理任务上,Transformers 的吞吐量往往较低,尤其是在大规模模型(如 GPT-3 级别)上,吞吐量可能是 vLLM 的一半甚至更少。
3. 内存效率
* vLLM:vLLM 的 PagedAttention 可以动态分配内存,优化 GPU 和 CPU 之间的内存交换,使得在有限的硬件资源上可以运行更大的模型,并保持稳定的推理性能。这种内存优化机制极大地减少了内存压力。
* 内存差异:vLLM 的内存占用率比 Transformers 较低,特别是在推理大型模型时,vLLM 可以减少 30% 到 50% 的内存使用。
* Transformers:Transformers 主要依赖基础的内存管理机制,虽然在小模型或单一推理任务上表现尚可,但在处理大模型时,内存占用通常较高,需要更多的硬件资源才能达到相同的推理效果。
4. 硬件要求
* vLLM:通过优化 GPU 内存和并发性能,vLLM 可以在较少的 GPU 资源下高效运行,并且在同样的硬件配置下,可以推理更大的模型。适合在硬件资源有限的场景中部署。
* Transformers:Transformers 在推理时对 GPU 内存的需求较大,特别是在处理大型模型时,通常需要更多的 GPU 或者更高规格的硬件支持。
5. 典型场景的性能测试
* GPT-3 类模型:
* 在 vLLM 中推理 GPT-3 大约可以比 Transformers 快 1.5 到 2 倍,内存占用减少约 30%,尤其在批量请求下吞吐量更是大幅提升。
* BERT 类模型:
* 对于 BERT 类的小型模型,差距相对较小,因为 Transformer 在小型模型上的性能优化已经足够良好。但 vLLM 依然在并发推理和批量推理任务中表现更优。
总结:性能差距概述
1. 推理延迟:vLLM 比 Transformers 框架低 30% 到 50%。
2. 吞吐量:在批量推理任务中,vLLM 的吞吐量比 Transformers 高 2 倍到 5 倍。
3. 内存使用:vLLM 的内存优化使得它在处理大模型时能节省 30% 到 50% 的内存。
4. 硬件要求:vLLM 在相同的硬件配置下能够更高效运行大模型。
因此,vLLM 在专门优化推理任务,特别是对于大规模并发和批量任务的场景中,性能大幅优于 Transformers。如果你正在寻找高性能推理的解决方案,特别是服务端部署场景,vLLM 是更好的选择。
vllm.git@minicpm3 和 vllm 有什么区别?
vllm.git@minicpm3 和 vllm 之间的区别通常指向软件包来源和版本控制的不同:
1. vllm:
* 这是指直接从 Python 包管理器(如 PyPI)安装的 vllm 包。
* 该版本通常是最新的稳定版本或公开发布的版本,已经通过测试并准备好供大多数用户使用。
2. vllm.git@minicpm3:
* 这个指的是一个特定的 Git 分支、标签或提交 ID(minicpm3)的版本。
* 当你看到这种格式时,意味着你是在 Git 仓库中获取代码,而不是通过 PyPI。这种方法常用于获取最新的开发版本,或用于解决某个特定问题的修复分支。
* @minicpm3 表示你正在指定分支、标签或提交(在这个例子中是 minicpm3)。
你可以通过以下命令从 GitHub 克隆并安装特定分支:
pip install git+https://github.com/your-repo/vllm.git@minicpm3
安装命令通常是这样的:
pip install vllm
总结:
* vllm 是发布的稳定版本,从 PyPI 安装。
* vllm.git@minicpm3 是从源码仓库特定分支或提交安装,通常用于获取未正式发布的代码或开发中的版本。
MiniCPM 3.0 效果比肩甚至超越众多 7B-9B 模型
MiniCPM 3.0 是一个 4B 参数量的语言模型,相比 MiniCPM1.0/2.0,功能更加全面,综合能力大幅提升,多数评测集上的效果比肩甚至超越众多 7B-9B 模型。
* 支持工具调用🛠️(Function Calling)和代码解释器💻(Code Interpreter):Berkeley Function Calling Leaderboard (BFCL) 上取得 9B 规模以下 SOTA,超越 GLM-4-9B-Chat、Qwen2-7B-Instruct。
* 超强的推理能力🧮:数学能力方面,MathBench 上的效果超越 GPT-3.5-Turbo 以及多个 7B-9B 模型。在非常具有挑战性的 LiveCodeBench 上,效果超越 Llama3.1-8B-Instruct。
* 出色的中英文指令遵循能力🤖:英文指令遵循 IFEval、中文指令遵循 FollowBench-zh 效果超越 GLM-4-9B-Chat、Qwen2-7B-Instruct。
* 长文本能力:原生支持 32k 上下文长度,32k 长度内大海捞针全绿。提出 LLM x MapReduce ,理论可处理的上下文长度达到 +∞。
* RAG能力:我们发布了 MiniCPM RAG 套件。基于 MiniCPM 系列模型的 MiniCPM-Embedding、MiniCPM-Reranker 在中文、中英跨语言检索测试中取得 SOTA 表现;针对 RAG 场景的 MiniCPM3-RAG-LoRA 在开放域问答等多项任务上超越 Llama3-8B、Baichuan2-13B 等模型。
GitHub - OpenBMB/MiniCPM: MiniCPM3-4B: An edge-side LLM that surpasses GPT-3.5-Turbo.MiniCPM3-4B: An edge-side LLM that surpasses GPT-3.5-Turbo. - OpenBMB/MiniCPMGitHubOpenBMB