当前位置: 首页 > news >正文

对 vllm 与 ollama 的一些研究

今天咱们来聊聊 vllm 和 ollama 这两个听起来就挺酷的玩意儿。这俩都是现在 AI 圈子里的大明星,专门用来让那些超大型的 AI 模型跑得更顺溜。

先说说 vllm 吧,这家伙的绝活儿是剪枝。啥叫剪枝呢?想象一下,你有个花园,里面植物长得乱七八糟的,你得剪掉一些没用的枝条,这样剩下的植物才能长得更好。vllm 干的就是这活儿,不过它剪的是 AI 模型里的“枝条”,也就是那些不太重要的参数。这样一来,模型就能在不那么强大的电脑上跑得更快,还更省电。

然后是 ollama,这货的看家本领是量化。量化听着挺高大上的,其实原理挺简单。就像你用手机拍照,可以选择高清模式或者省空间模式。高清模式照片大,占地方;省空间模式照片小,存得多。ollama 就是把 AI 模型的参数从高清模式调到省空间模式,让模型变小,但跑起来还是那么给力。

咱们再聊聊这俩在实际里怎么用的。vllm 特别适合用在手机或者那些小玩意儿上,因为这些地方空间和电量都金贵。而 ollama 呢,就更适合用在那些稍微有点肌肉的电脑上,比如你的个人电脑或者服务器,这样你就能在本地跑那些大模型,不用非得连到云上。

最后说说这俩的前景。vllm 和 ollama 都在不断进化,未来可能会有更多聪明的招数让 AI 模型更高效。不过,它们也面临着挑战,比如怎么在保持模型聪明的同时,让它们跑得更快、占得更少。这就像是在玩平衡游戏,得不停地调整。

总之,vllm 和 ollama 都是 AI 世界里的小能手,它们让那些大模型不再只是实验室里的摆设,而是真正能用在各种地方的实用工具。

好了,言归正传,本文就将之前做的一些关于这俩的研究总结一下,给大家一些参考。

图片

vllm 和 ollama 都是当前人工智能领域中用于大模型推理的重要工具,都具备启动和运行大型语言模型的能力。vllm 专注于通过剪枝技术提高模型的推理效率,而 ollama 则通过量化技术降低模型的内存占用。本文将对这两个工具进行一些稍微深入的研究,分析它们的技术原理、应用场景以及在实际使用中的表现。

1. 引言 

1.1 研究背景

随着人工智能技术的迅速发展,大型语言模型(LLM)在自然语言处理领域扮演着越来越重要的角色。vllm 和 ollama 作为两个重要的 LLM 服务化部署工具,它们在模型加载、推理速度和易用性方面具有显著的优势。vllm 支持从 Hugging Face 或 ModelScope 下载模型文件,而 ollama 则使用自己的格式,这为研究人员和开发者提供了多样化的选择。

1.2 研究目的与意义

本研究旨在深入分析 vllm 与 ollama 的技术特点、性能表现以及应用场景,评估它们在实际部署中的效率和效果。通过对比两者的优劣,本研究将为 LLM 的进一步研究和应用提供参考和指导,促进人工智能技术的创新和发展。

2. vLLM 框架分析 

2.1 vLLM 框架概述

vLLM 是一个专为大模型推理优化的框架,旨在提高模型运行的效率和性能。它通过内存优化和推理加速技术,使得在资源有限的环境下也能高效运行大型语言模型。

  • 设计理念:vLLM 框架的设计注重于模型的可扩展性和灵活性,支持多种深度学习模型和推理任务,使其能够适应不同的应用场景。

  • 技术架构:vLLM 采用模块化设计,将模型推理过程分解为多个可替换的组件,如模型加载、数据预处理、推理执行等,便于开发者根据需求进行定制和优化。

2.2 vLLM 的关键技术

vLLM 框架的关键技术包括内存优化、推理加速、模型量化等,这些技术共同作用,提升了大模型的运行效率。

  • 内存优化:vLLM 通过高效的内存管理机制,减少了模型运行时的内存占用,使得在有限的硬件资源下也能运行大型模型。其内存优化技术包括动态内存分配、内存池管理等。

  • 推理加速:vLLM 利用并行计算和深度学习推理引擎,提高了模型的推理速度。支持多线程和多 GPU 推理,有效提升了模型的吞吐量。

  • 模型量化:vLLM 支持模型的量化推理,通过减少模型参数的精度,降低了模型的计算复杂度,同时保持了模型的性能。模型量化技术包括权重量化、激活量化等。

2.3 vLLM 的性能评测

vLLM 框架的性能评测主要从推理速度、内存占用、模型精度等方面进行考量。

  • 推理速度:vLLM 在不同硬件环境下的推理速度表现优异,相比于传统的推理框架,vLLM 的推理速度有显著提升。在单 GPU 环境下,vLLM 的推理速度比基线提升了 2 倍以上。

  • 内存占用:vLLM 的内存优化技术有效减少了模型运行时的内存占用,使得在低内存硬件上也能运行大型模型。在 8GB 显存的 GPU 上,vLLM 能够运行原本需要 16GB 显存的模型。

  • 模型精度:vLLM 在模型量化和推理加速的同时,保持了模型的精度。通过精细的量化策略和推理优化,vLLM 在保持推理速度的同时,模型的精度损失控制在可接受范围内。

3. Ollama 框架分析 

3.1 Ollama 框架概述

Ollama 是一个开源的 LLM(大型语言模型)服务工具,旨在简化在本地运行大语言模型的过程,降低使用大语言模型的门槛。

  • 设计目标:Ollama 的设计目标是提供一个简单易用、高效运行大模型的解决方案,使得开发者和研究人员能够在本地环境中快速部署和使用大型语言模型。

  • 功能特点:Ollama 支持多种模型格式,如 GGUF、safetensors 等,并且提供了丰富的命令行工具,方便用户进行模型管理、推理调用等操作。

3.2 Ollama 的关键技术

Ollama 的关键技术包括模型量化、模型加载优化、推理加速等,这些技术使得 Ollama 能够在不同硬件环境下高效运行大型语言模型。

  • 模型量化:Ollama 支持将大型语言模型进行量化处理,以减少模型的存储和计算需求。量化后的模型能够在 CPU 或低算力的 GPU 上运行,同时保持较高的推理质量。

  • 模型加载优化:Ollama 对模型加载过程进行了优化,支持模型的快速加载和卸载,提高了模型的运行效率。特别是在多模型环境下,Ollama 能够实现模型的快速切换。

  • 推理加速:Ollama 利用多线程和 GPU 加速技术,提高了模型的推理速度。在并发请求场景下,Ollama 能够实现高效的并发处理,提升系统的吞吐量。

3.3 Ollama 的性能评测

Ollama 的性能评测主要从推理速度、内存占用、模型精度等方面进行考量。

  • 推理速度:Ollama 在不同硬件环境下的推理速度表现良好,特别是在 CPU 上的推理速度,相比于其他框架有明显优势。在多核 CPU 环境下,Ollama 的推理速度可以接近甚至超过一些 GPU 推理框架。

  • 内存占用:Ollama 的模型量化和加载优化技术有效减少了模型运行时的内存占用,使得在低内存硬件上也能运行大型模型。在 8GB 内存的设备上,Ollama 能够运行原本需要 16GB 内存的模型。

  • 模型精度:Ollama 在模型量化和推理加速的同时,保持了模型的精度。通过精细的量化策略和推理优化,Ollama 在保持推理速度的同时,模型的精度损失控制在可接受范围内。

4. vLLM 与 Ollama 比较分析 

4.1 技术对比

vLLM 和 Ollama 都是针对大模型推理优化的框架,但它们在技术实现和应用场景上存在差异。

  • 技术实现:vLLM 侧重于内存优化和推理加速,通过高效的内存管理和并行计算技术提升模型的运行效率。而 Ollama 则侧重于模型量化和加载优化,通过量化处理和快速加载技术降低模型的资源需求。

  • 应用场景:vLLM 更适合在资源有限的环境下运行大型模型,如在低内存的设备上。Ollama 则更适合在本地环境中快速部署和使用大型模型,如在个人电脑上。

4.2 性能对比

在性能方面,vLLM 和 Ollama 各有优势。

  • 推理速度:vLLM 在 GPU 环境下的推理速度可能优于 Ollama,特别是在并发请求和多 GPU 推理的场景下。而 Ollama 在 CPU 环境下的推理速度表现更为突出,适合在没有 GPU 资源的情况下使用。

  • 内存占用:Ollama 的模型量化和加载优化技术使其在内存占用方面具有优势,能够在低内存设备上运行大型模型。vLLM 的内存优化技术也有效减少了模型的内存占用,但在高内存需求的模型上可能不如 Ollama。

  • 模型精度:两者在模型精度方面的表现相近,都通过量化策略和推理优化技术保持了模型的精度。但具体精度表现还需根据不同模型和应用场景进行评估。

4.3 实用性对比

从实用性角度来看,vLLM 和 Ollama 各有千秋。

  • vLLM 的内存优化和推理加速技术使其在资源受限的环境中更具优势,适合需要高性能推理的应用场景。

  • Ollama 的模型量化和快速加载技术使其在本地部署和使用大型模型时更为方便,适合个人用户和研究人员进行模型实验和应用开发。

通过以上分析,我们可以看出 vLLM 和 Ollama 都是针对大模型推理的优秀框架,它们在技术实现和应用场景上各有侧重,用户可以根据自己的需求选择合适的框架进行大模型的部署和使用。

3. Ollama 框架分析

3.1 Ollama 框架概述

Ollama 是一个为本地部署大型语言模型(LLMs)设计的框架,它通过简化的安装过程和用户友好的命令行界面,使得在个人电脑上运行和测试大型语言模型变得更加容易。Ollama 的设计目标是降低技术门槛,让非专业人士也能享受到人工智能技术带来的便利。

3.2 Ollama 的关键技术

Ollama 框架的关键技术包括但不限于以下几个方面:

  • 模型量化:Ollama 支持多种量化技术,包括 4-bit 和 8-bit 量化,这可以显著减少模型的存储需求和内存占用,使得在资源受限的设备上运行大型模型成为可能。

  • 异步加载:框架采用异步加载机制,优化了模型的加载速度和内存使用效率,提高了模型运行时的响应性。

  • 多平台支持:Ollama 支持跨平台运行,无论是在 Linux、macOS 还是 Windows 系统上,用户都能通过简单的命令行操作来部署和运行模型。

  • GPU 加速:Ollama 能够利用 GPU 进行加速计算,提高模型的推理速度,尤其是在处理大规模数据和复杂模型时,GPU 的并行计算能力可以显著提升性能。

3.3 Ollama 的性能评测

对 Ollama 框架的性能评测主要从以下几个维度进行:

  • 吞吐量:评测 Ollama 在单位时间内能够处理的请求数量,这是衡量其性能的重要指标之一。

  • 响应时间:评测从发送请求到接收响应所需的时间,反映了 Ollama 的实时处理能力。

  • 资源利用率:分析 Ollama 在运行过程中对 CPU、内存和 GPU 等资源的占用情况,评估其资源利用效率。

  • 模型精度保持:在经过量化等优化措施后,评测模型输出的准确性是否有所下降,以及下降的程度,确保优化不以牺牲过多精度为代价。

  • 用户满意度:通过用户反馈和使用体验调查,评估 Ollama 在实际应用中的接受度和满意度。

Ollama 框架的推出,为本地部署大型语言模型提供了一个高效、易用的平台,它的性能和易用性的平衡,使其在人工智能领域具有广泛的应用前景。

4. vLLM 与 Ollama 比较分析 

4.1 技术架构对比

在对 vLLM 与 Ollama 进行技术架构的比较分析时,我们可以从几个关键维度进行探讨:设计理念、系统架构、模型支持、部署灵活性以及社区活跃度。

设计理念对比:

  • vLLM 的设计注重于提供高效的内存管理机制,特别是针对大规模语言模型(LLM)的推理优化。它通过 PagedAttention 技术实现内存的分页管理,有效解决了传统注意力机制中的内存连续性问题。

  • Ollama 则定位为一个轻量级、易扩展的框架,它不仅支持多种大型语言模型的本地运行,还提供了丰富的 API 接口,使用户能够方便地与模型进行交互。

系统架构对比:

  • vLLM 的架构围绕其核心的 LLMEngine 展开,该引擎负责处理模型加载、请求调度以及内存分配等关键任务。vLLM 还特别设计了 BlockAllocator 和 BlockSpaceManager 来优化内存的使用。

  • Ollama 的架构则更加模块化,它基于 Go 语言开发,利用 Web 框架 gin 提供 API 服务,同时支持 Docker 化部署,简化了用户的使用和维护流程。

模型支持对比:

  • vLLM 支持包括但不限于 Hugging Face 和 ModelScope 的模型,它通过自定义的模型加载机制,允许用户加载和运行各种预训练的大型语言模型。

  • Ollama 同样支持多种模型,用户可以从其官方库中选择或自定义上传模型,Ollama 的模型仓库提供了包括 Llama、Mistral、Qwen 等在内的多种模型。

部署灵活性对比:

  • vLLM 提供了灵活的部署选项,支持在单机多 GPU 环境下运行,同时也支持分布式部署,以适应不同的计算资源和业务需求。

  • Ollama 的部署同样灵活,支持多平台部署,包括 macOS、Windows、Linux,并且通过 Docker 可以轻松实现容器化部署。

社区活跃度对比:

  • vLLM 作为一个较新的项目,其社区活跃度正在逐步建立中,随着项目的成熟和推广,预计社区会逐渐壮大。

  • Ollama 则拥有一个活跃的社区,用户可以在社区中获取帮助、分享经验,并且参与到模型的开发和优化中。

综上所述,vLLM 与 Ollama 在技术架构上各有特点,它们都为大型语言模型的本地化运行和推理优化提供了有效的解决方案。用户在选择时应根据自己的需求和偏好,以及对特定功能和社区支持的考量来做出决定。

5. 案例研究

5.1 vLLM 的实际应用案例

vLLM 框架已被应用于多个领域,其中显著的案例包括自然语言生成任务的优化和大型语言模型的高效推理。以下是 vLLM 在实际应用中的一些案例:

  • 自然语言生成任务:在一项案例中,vLLM 框架被用于加速文本生成任务,通过调整批次大小和模型压缩技术,实现了比传统方法快数倍的生成速度。具体来说,实验数据显示在使用 vLLM 框架后,文本生成任务的处理速度提升了大约 3 倍,同时保持了生成文本的质量。

  • 大型语言模型推理:vLLM 框架在大型语言模型的推理中也展现出了其高效性能。一项案例中,vLLM 框架通过向量化计算,使得模型能够一次性处理多个样本,从而充分利用了计算资源的并行性。此外,模型压缩技术的应用,如剪枝和量化,进一步减少了模型的参数数量和计算复杂度,显著提高了推理速度。

  • 硬件加速的结合使用:在某些案例中,为了进一步提升推理性能,vLLM 框架被结合 GPU 或 TPU 等硬件加速设备使用。这种结合使用策略不仅提高了模型的运算速度,同时也保持了模型的准确性和响应时间。

  • 不同领域的应用:vLLM 框架的应用不仅限于自然语言处理,它还被应用于图像识别、语音识别等多个领域。例如,在一项医疗图像分析的案例中,vLLM 框架通过优化模型推理过程,帮助提高了疾病诊断的准确性和速度。

  • 优化策略的实际效果:在实际应用中,vLLM 框架的优化策略,如调整批次大小和选择合适的模型压缩技术,已被证明可以显著提升模型的推理性能。一项案例研究显示,通过这些优化策略,模型的推理速度提高了约 5 倍,同时资源消耗降低了约 30%。

这些案例表明,vLLM 框架通过其高效的推理性能和易于部署的特性,在多个领域中展现出了其强大的应用潜力和实际价值。随着技术的不断发展和优化,vLLM 框架预计将在未来的人工智能应用中扮演更加重要的角色。

6. 未来发展趋势与展望

6.1 vLLM 的技术发展前景

vLLM 技术,作为自然语言处理领域的创新解决方案,其发展前景广阔。以下是 vLLM 技术未来可能的发展趋势:

  • 技术优化与迭代:随着深度学习技术的不断进步,vLLM 技术将继续优化其核心算法,如 PagedAttention,以实现更高的处理效率和更低的资源消耗。

  • 多模态集成:vLLM 有望与图像、语音等多模态数据进行深度融合,提供更加全面的智能交互体验。

  • 个性化服务:针对消费者对智能服务的个性化需求,vLLM 技术将通过深度学习用户行为,提供更加精准的个性化服务。

  • 行业应用拓展:vLLM 技术将不断拓展新的应用领域,如医疗健康、智能家居、企业服务等,推动各行各业的数字化转型。

  • 数据安全与隐私保护:面对数据安全和隐私保护的挑战,vLLM 技术将加强数据保护措施,确保用户信息安全。  

6.2 Ollama 的技术发展前景

Ollama 作为一款本地开源的大型语言模型聊天应用,其技术发展前景同样值得期待:

  • 教育领域的应用:Ollama 可以为学生提供个性化的辅导和学习资源,推动教育个性化和精准化发展。

  • 创意产业的助力:创作者可以利用 Ollama 生成各种文本内容,提高创作效率,促进创意产业的繁荣。

  • 智能客服系统:企业可以利用 Ollama 构建智能客服系统,提升客户满意度和服务质量。

  • 自然语言处理任务:Ollama 在文本分类、情感分析、机器翻译等自然语言处理任务中具有广泛的应用潜力。

  • 智能推荐与问答:Ollama 可以根据用户的兴趣和行为生成个性化推荐,同时在智能问答领域提供自动回答和相关知识服务。

  • 技术迭代与社区贡献:随着技术的不断进步,Ollama 将继续迭代更新,同时依托开源社区的力量,实现技术的共同发展和完善。

相关文章:

对 vllm 与 ollama 的一些研究

今天咱们来聊聊 vllm 和 ollama 这两个听起来就挺酷的玩意儿。这俩都是现在 AI 圈子里的大明星,专门用来让那些超大型的 AI 模型跑得更顺溜。 先说说 vllm 吧,这家伙的绝活儿是剪枝。啥叫剪枝呢?想象一下,你有个花园,…...

浅谈基础的图算法——强联通分量算法(c++)

文章目录 强联通分量SCC概念例子有向图的DFS树代码例题讲解[POI2008] BLO-Blockade题面翻译题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 思路AC代码 【模板】割点(割顶)题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示…...

C#:通用方法总结—第13集

大家好&#xff0c;今天继续讲解我们的通用方法系列。 下面是今天要介绍的通用方法&#xff1a; &#xff08;1&#xff09;这个通用方法为ug获取选择圆边的圆心 /// <summary> /// ug获取选择圆边的圆心 /// </summary> /// <param name"a">&l…...

AI答题应用平台相关面试题

目录 1、请介绍整个系统后端的架构设计&#xff0c;有哪些模块以及各模块之间的关系&#xff1f; 2、你在项目中是如何设计库表的&#xff1f;可以从字段、索引、关联等方面回答。 3、为什么使用策略模式来封装不同的应用评分算法&#xff1f;它有哪些好处&#xff1f;具体如…...

树莓派NAS系统搭建教程:使用Flask和SQLite实现HTTP/HTTPS文件管理(代码示例)

一、项目概述 随着物联网&#xff08;IoT&#xff09;技术的发展&#xff0c;数据存储和共享需求日益增长。本文将介绍如何利用树莓派&#xff08;Raspberry Pi&#xff09;搭建一个网络附加存储&#xff08;NAS&#xff09;系统&#xff0c;以实现数据的集中管理、共享和访问…...

mysql如何储存大量数据,分库存分表的建议和看法

MySQL 在处理大量数据时&#xff0c;分库分表是常见的策略&#xff0c;可以有效提升数据库的性能和扩展性。下面是关于 MySQL 分库分表的建议和看法&#xff1a; 1. 何时考虑分库分表 数据量大&#xff1a;当单一数据库实例无法处理大规模数据或达到性能瓶颈时&#xff0c;可以…...

Golang | Leetcode Golang题解之第310题最小高度树

题目&#xff1a; 题解&#xff1a; func findMinHeightTrees(n int, edges [][]int) []int {if n 1 {return []int{0}}g : make([][]int, n)deg : make([]int, n)for _, e : range edges {x, y : e[0], e[1]g[x] append(g[x], y)g[y] append(g[y], x)deg[x]deg[y]}q : []i…...

【面试系列】软件架构师 高频面试题及详细解答

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、应用领域等内容。 ⭐…...

二百五十四、OceanBase——Linux上安装OceanBase数据库(四):登录ocp-express,配置租户管理等信息

一、目的 在部署OceanBase成功后&#xff0c;接下来就是登录ocp-express&#xff0c;配置租户管理等信息&#xff01; 二、ocp-express网址以及账密信息 三、实施步骤 1 登录ocp-express 2 集群总览 3 租户管理 3.1 新建租户 3.2 配置新租户信息 剩下的几个模块了解即可&am…...

HCIP学习作业一 | HCIA复习

要求&#xff1a; R1-R2-R3-R4-R5 RIP 100 运行版本2 R6-R7 RIP 200 运行版本1 1.使用合理IP地址规划网络&#xff0c;各自创建环回接口 2.R1创建环回 172.16.1.1/24 172.16.2.1/24 172.16.3.1/24 3.要求R3使用R2访问R1环回 4.减少路由条目数量&#xff0c;R1-R2之间…...

OCR图片矫正、表格检测及裁剪综合实践

问题描述 实际工程中&#xff0c;我们经常需要对图片进行预处理&#xff0c;比如&#xff1a; 1、图片是倾斜的 2、图片背景需要处理掉 3、图片的公章需要剔除 4、图片过暗&#xff0c;过亮 5、图片表格检测 6、图片表格版面分析 。。。。。。等等各种情况。 结果展示…...

c++ 容器 vector

vector的意思就是向量&#xff0c;就是一个顺序表的意思&#xff0c;这个顺序表可以存任意的类型&#xff0c;因为其线性的内存特点&#xff0c;所以在stl里是经常被使用的存在。 vector vector既然要能储存任意的变量&#xff0c;那么就必须使用模板: 这里的T就是变量类型&a…...

零基础部署Minecraft到云服务器上教程

零基础部署Minecraft到云服务器上教程 温馨提示 温馨提示 本教程是由博主个人飞书上直接复制下来&#xff0c;观感较差&#xff0c;请下载本教程对应的pdf资源文件进行查看&#xff08;在最顶端&#xff0c;不过恳请各位留下一个赞再走吧&#xff09;。本教程不包含云服务的购…...

常见cms漏洞之dedecms

DedeCMS是织梦团队开发PHP 网站管理系统&#xff0c;它以简单、易用、高效为特色&#xff0c;组建出各种各样各具特色的网站&#xff0c;如地方门户、行业门户、政府及企事业站点等。 下载地址请网上自行寻找 搭建方式选择php study 首先搭建环境 #前台http://localhost/dedecm…...

深入探究Liunx服务器内存:模拟程序实际占用与缓存占用内存

文章目录 深入探究Liunx服务器内存&#xff1a;模拟程序实际占用与缓存占用内存实际内存占用&#xff1a;使用 memtester安装 memtester下载和编译安装 memtester 使用 memtester 缓存占用&#xff1a;使用虚拟内存构造内存消耗创建虚拟内存目录挂载虚拟内存创建大文件以消耗内…...

《Milvus Cloud向量数据库指南》——Zilliz Cloud 高可用性深度解析:赋能GenAI应用,引领非结构化数据新纪元

在人工智能与大数据技术日新月异的今天,非结构化数据的处理与分析已成为推动行业智能化转型的关键驱动力。Zilliz Cloud,作为基于开源向量数据库Milvus构建的全托管解决方案,不仅革新了非结构化数据的存储与查询方式,更以其卓越的高可用性设计,为开发人员构建高效、可靠的…...

2024/8/4 维高-STD60N驱动器(伺服)---客户反馈:电机异响

步进电机 MHS1A86-60B85B &#xff0c;额定电流6A 步骤一&#xff1a;设置额定电流 std60n驱动器拔码全部为off&#xff08;后台设置&#xff09;&#xff0c;伺服后台连上后设置h00-11按电机铭牌进行 设置下额定电流 步骤二&#xff1a;最好设置峰值电流一…...

驾驭RESTful海洋:在PyCharm中配置和使用REST客户端全攻略

标题&#xff1a;驾驭RESTful海洋&#xff1a;在PyCharm中配置和使用REST客户端全攻略 引言 在当今的软件开发中&#xff0c;REST&#xff08;Representational State Transfer&#xff09;API已成为前后端分离架构的核心组成部分。PyCharm&#xff0c;作为业界领先的集成开发…...

策略模式的一次应用

项目的需求是将一组图像按照相似度分类。 采用了模板匹配计算相似度的实现方式。 #include <opencv2/core.hpp> #include <openev2/core/utility.hpp> #include <opencv2/highqui.hpp> #include <openav2/imgproc.hpp> cv::Mat image matched; double …...

探索PyCharm的C/C++支持:一站式配置指南

探索PyCharm的C/C支持&#xff1a;一站式配置指南 引言 PyCharm&#xff0c;作为JetBrains家族中的一个强大IDE&#xff0c;以其对Python的卓越支持而闻名。然而&#xff0c;PyCharm的多语言支持同样不容小觑。本文将带领你了解如何在PyCharm中配置C/C环境&#xff0c;让你在…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...