[AI]从零开始的llama.cpp部署与DeepSeek格式转换、量化、运行教程
一、前言
在上一次的DeepSeek的部署教程中,我们使用Ollama与LM Studio很轻松的部署了DeepSeek并且也完成了相关API的调用,如果还有不会的小伙伴请看下面的教程:
DeepSeek本地部署:[AI]从零开始的DeepSeek本地部署及本地API调用教程-CSDN博客
当然,在部署的时候,我们也发现了一些问题,那就是Ollama和LM Studio它们都只能运行GGUF格式的模型,但是我们会发现,在模型仓库中,模型的格式非常多样,比如有下图这种的:
这样的模型有一堆的配置文件和一个向量文件。那么这种模型,我们要怎么运行呢?答案其实很简单,这里我们需要使用到一款非常强大LLM框架——llama.cpp。它不仅可以完成模型的格式转换、量化,自身还可以运行被转化出来的模型。那么本次教程,就来教大家如何使用llama.cpp转换模型格式以及模型量化。如果你准备好了,就让我们开始吧!
二、谁适合本次教程
在本次教程中,会提供两种llama.cpp的安装方法,一种是自己编译llama.cpp另一种是直接使用预编译版本。如果你想体验编译的过程,那么你可以跟着我一起编译。如果你是小白,那么就建议直接使用预编译的版本,我也会讲解如何下载预编译的llama.cpp。最后就是,模型格式转换部分可能会使用到一个python脚本,这里需要部署脚本运行所需的环境,请确保自己对python或者python虚拟环境有一定的了解。
三、llama.cpp的部署
在前面也提到了,本次我们会提供两种llama.cpp的部署方法,一种是自己编译,另一种是直接使用已经编译好的。这里的编译也提供了CPU和GPU两种版本的编译方法,GPU编译的过程比较麻烦并且对显卡有一定的要求。顺带一提,如果你只是想将模型的格式转化为GGUF的话,可以直接跳过整个第三步,模型格式的转化不需要安装llama.cpp。如果你准备好了,那就让我们开始吧!
1.编译安装llama.cpp
之前也提到了,自己编译安装llama.cpp是非常麻烦的,需要安装好几个环境,不建议小白轻易尝试。自己安装llama.cpp首先要分两种情况。有NVIDIA的GPU和没有NVIDIA的GPU。这里划重点,必须要NVIDIA的GPU才行,目前AMD的显卡有一定的解决方案,但是资料太少了,这里不推荐。如果你没有NVIDIA的GPU那就只能编译CPU版的llama.cpp。llama.cpp我们主要也是用来做模型的量化,不会长期在上面运行模型,所以,CPU版的llama.cpp并没有什么影响,最多就是量化的时候会慢一些。
1.CUDA的安装 (没有NVIDIA显卡跳过此步)
如果你确定你有NVIDIA的显卡,那么就需要为你的显卡安装一个CUDA用来驱动CUDA核心。首先,使用下面的命令查看自己显卡支持的CUDA版本,直接在cmd窗口或者powershell输入即可:
nvidia-smi.exe
这里被我圈出来的数字就是显卡支持的最大的CUDA版本:
重点的来了,如果你这里的CUDA版本低于12.4请跳过此步,你的显卡不支持自己编译最新版的llama.cpp,会引发下面的错误:
当然,你不一定需要自己编译,也可以使用下面的预编译版本,那里有llama.cpp官方编译好的GPU版的llama.cpp。
当你确定你的GPU条件符合以后,就可以开始安装CUDA了,这里的CUDA安装教程我在之前的pytouch安装教程中已经讲得很详细了,你可以前往我的pytouch安装教程中查看如何为自己的显卡安装CUDA:
pytouch安装教程:[python]如何正确的安装pytorch?(详细)_pytorch安装-CSDN博客
当然,如果你是计算机高手知道安装步骤,直接前往CUDA的下载地址即可:
CUDA官网地址:CUDA Toolkit Archive | NVIDIA Developer
当你安装安装好CUDA以后,输入下面的命令,如果有如下输出就表示CUDA安装成功了:
nvcc -V
如果你没有这样的输出,可以尝试跟着CUDA的安装教程再操作一遍,一般再CUDA这一步不会出错,这里就不多说了。
2.CMake的安装
下面我们需要安装一个构建工具CMake,这里大家可以直接点击下方的链接前CMake的官网:
CMake官网:CMake - Upgrade Your Software Build System
进入官网以后,就能看到以下界面了:
我们直接点击右上角的“Download”:
进入新的页面以后,往下滑就能看到许多CMake的版本了:
这里我们直接选择64位的版本即可:
这里需要注意的是目前是2025年2月14日,目前CMake的版本是3.31.5,如果你在未来的某天使用我的方法构建失败了,那就将CMake和llama.cpp源码都降级到今天的版本。
点击了下载以后,浏览器就弹出了下载:
大家将其下载到自己能找到的地方即可:
我们双击这个安装引导程序开始安装,这里直接点击“Next”:
然后勾选同意协议随后点击下一步:
这里的第一个选项是将CMake添加到环境变量,需要勾上。第二个选项是将CMake添加到桌面,大家视情况勾选即可。勾选完以后,我们点击“Next”:
随后就是选择安装的路径了,这里大家自行选择即可,选择完成以后点击“Next”:
最后点击“Install”:
然后CMake就进入了安装阶段,大家等待安装完成即可:
出现下面的窗口就表示安装已经完成了,我们直接关掉窗口即可:
然后可以在cmd或者powershell中输入下面的命令来查看CMake是否安装成功:
cmake --version
输入命令以后CMake会输出自己的版本号,这就表示已经安装成功了:
如果你在这一步被提示找不到命令,可以检查CMake安装目录下的bin目录是否被添加到环境变量,如果没有,可以手动添加。
至此,我们CMake的安装就完成了。
3.Visual Studio 2022的安装
这里建议大家和我使用一样的VS版本,避免出现一些未知的错误。这里VS的安装过于简单,只要你学过C语言应该都用过。所以VS的安装步骤就不多说了。我们主要讲一下需要在VS中勾选哪些开发环境。这里大家可以跟着我勾:
安装好对应的环境以后VS的安装就结束了。它们有的教程还需要添加VS的某些路径到环境变量,经过测试,这不是必须的。
5.拉取llama.cpp的源码
我们直接使用git命令拉取llama.cpp的代码,在座的各位应该都会使用git吧?嗯,能够自己编译llama.cpp的应该都会使用git,那我就不教喽:
git clone https://github.com/ggerganov/llama.cpp.git
这里大家将其拉取到自己能找到的地方即可,拉取下来以后,就得到了一个名为“llama.cpp”的文件夹:
6.llama.cpp的编译
我们进入llama.cpp的项目文件夹就能看到下面的文件和文件夹了:
这里,我们需要创建一个目录,用于存放编译后生成的文件,大家在powershell中执行下面的命令即可,当然,也可以直接右键创建:
mkdir build
这里使用下面的命令进入这个文件夹:
cd build
进入llama.cpp项目目录下的build文件夹以后,就可以输入下面的命令了:
cmake -DGGML_CUDA=ON ../
这里需要注意的是,只有你想编译GPU版的llama.cpp时才需要加“-DGGML_CUDA=ON”参数,如果你想编译CPU版的llama.cpp直接输入“cmake ../”即可。如果你的GPU的CUDA不符合要求或者是没有GPU,加了“-DGGML_CUDA=ON”参数就会出现错误导致相关的编译文件无法生成。这里的“../”表示上级目录,这里的命令也就表示,为build的上级目录下的文件生成makefile文件。
命令执行以后,可以看到许多输出:
结束以后,我们的build中就多了许多文件:
这里需要注意的是,如果你终端输出了一些乱码的字符或者有error字样,都代表生成makefile这一步出错了。建议检查CUDA的版本,大部分的错误都是CUDA版本不符引起的。实在不行,就去掉“-DGGML_CUDA=ON”参数,编译CPU版的llama.cpp。
在makefile生成以后我们就可以开始编译了,这里我们直接使用下面的命令进行编译:
cmake --build . --config Release -j20
这里的-j20表示使用20个线程进行编译,大家根据自己CPU情况自行修改。
编译时,可能会出现警告(不用在意),并且CPU占用非常高:
出现下面的提示,就表示编译已经完成了:
编译生成的文件都被放到了“bin\Release”文件夹下:
图中所示文件夹中的那些exe文件就是我们通过编译得到的可执行文件了。后面会教大家如何使用这些文件。至此,我们llama.cpp的编译就完成了。
2.使用预编译的llama.cpp
现在来教大家如何使用预编译的llama.cpp。使用预编译的llama.cpp也分为有NVIDIA的GPU和没有两种情况。llama.cpp的官方编译了一套CUDA版的llama.cpp。并且支持到了CUDA12.4。下面就来教大家如何下载llama.cpp的预编译文件,我们首先通过下面的链接来到llama.cpp的开源主页:
llama.cpp开源主页:ggerganov/llama.cpp: LLM inference in C/C++
因为是GitHub可能加载会比较慢甚至加载失败,大家可以选择更换网络环境或者使用一些正向代理手段。进入llama.cpp的开源主页以后,我们直接点击右边的Releases下面发布的应用:
进来以后,就可以看到许多llama.cpp的预编译版本了:
这里我们主要看windows平台并且架构为X64的,这也是最常见的情况,如下图被我框起来的:
这里首先我们来看第一个名字:
llama-b4713-bin-win-avx-x64.zip
这里的llama很好理解,就指的是llama.cpp嘛,后面的“b4173”表示版本号,后面的“win”就表示windows系统。再往后就是"avx"这是英特尔推出的一种指令集扩展,下面的也同理,avx2表示256位,avx512表示512位。如果你只有CPU的话,就使用预编译的avx版本,这里下载512即可。
然后我们再看看下面的名字:
llama-b4713-bin-win-cuda-cu11.7-x64.zip
这里前面的部分就不说了,就说说后面的“cuda”部分,这里的cuda表示这个预编译包是在cuda之上构建的,这也意味着,你需要自己的cuda满足要求才能运行。后面的“cu11.7”就表示,这个包是基于cuda11.7构建的,你要运行的话,显卡的CUDA版本就必须大于11.7,使用下面的命令可以直接查看显卡支持的CUDA版本:
nvidia-smi.exe
这里大家根据输出的内容就可以确定自己的CUDA版本了。在确定了CUDA版本以后需要安装CUDA软件才能调用CUDA核心。CUDA的安装步骤我们在pytouch的安装教程中讲过,大家可以自行前往:
pytouch安装教程:[python]如何正确的安装pytorch?(详细)_pytorch安装-CSDN博客
这里大家需要确定,你下载的llama.cpp的预编译包的CUDA版本没有大于你自己的CUDA版本。假如你下载的预编译包支持12.4的CUDA,但是你显卡最高就只能支持到CUDA11.8那么这个包很可能就无法运行。
下面我们继续看文件名字:
llama-b4713-bin-win-hip-x64-gfx1030.zip
这是一个支持AMD显卡的包,“hip”是AMD显卡特殊的调用接口类似于N卡的CUDA,后面的“gfx1030”表示这个包支持的版本。这里我对AMD的显卡不是很了解,就不多说了。有能力的小伙伴自己研究吧!
大家选择好适配自己硬件的包以后,点击包,浏览器就会开始下载了,这里建议新建一个文件夹将其放在文件夹中,我这里就放在桌面的文件夹中了:
我们这里直接右键解压即可,解压得到下面的文件:
这些文件都是可执行文件,和我们编译时得到的是一样的。这样我们预编译的llama.cpp就已经部署好了。后面我会教大家如何使用。
四、使用llama.cpp转换模型格式为GGUF
现在来教大家,如何将不同格式的模型转换为GGUF格式,首先我们看看模型大致分为几种。目前,模型站中常见的模型,有safetensors为后缀的模型,如下图:
我们可以看到,模型文件夹中有两个非常大的以safetensors结尾的文件,这就是模型权重文件。其它还有一些用JSON写的配置文件。这是第一种常见的模型格式。还有一种就是以bin结尾的,如下图:
我们可以看到这里有一个名为“pytouch_model.bin”的文件。从大小来看,很明显,这也是一个模型权重文件。
以上说的两种都是常见的模型权重格式,我们可以使用llama.cpp将其转换为GGUF格式的模型。下面就让我们开始吧!
1.Conda的安装
在开始之前,我们需要准备一些环境,因为在llama.cpp中,处理模型格式转换的是一个python的脚本。所以我们这里需要安装一个Conda来管理python和python的一些依赖,这一步请确保自己有一定的python基础。Conda的安装可以查看我以前的Conda安装教程:
Miniconda安装:[python]我们应该如何安装Miniconda虚拟环境?(详细)_miniconda创建虚拟环境-CSDN博客
如果你对Conda不够了解也可以从上面的教程中学习。
安装好以后,启动conda的终端,输入conda就可以获得下面的输出:
至此,Conda的安装就完成了。
2.llama.cpp项目拉取
这里考虑到可能会有新手,不会使用git命令,这里我们就使用简单的办法下载llama.cpp的项目源码。这里大家先点击下方的链接前往llama.cpp的主页:
llama.cpp项目主页:
ggerganov/llama.cpp: LLM inference in C/C++
因为是github链接,可能会出现有的小伙伴打不开的情况。这里可以尝试更换网络环境或者使用一些正向代理手段。
进入llama.cpp的主页以后,我们点击右边的code:
随后再点击“Download”:
点击以后,过一会浏览器就会弹出下载了:
将下载下来的压缩包直接解压以后,就得到了下面的文件,这些文件和拉取的是一样的:
至此,我们llama.cpp的的项目文件就算是拉取过来了。
3.安装依赖
这里因为我们要运行的是一个python脚本,我们就需要安装相关的依赖文件。这里首先在Conda的终端中使用下面的命令创建一个虚拟环境:
conda create --name llamacpp python=3.10
创建好以后,使用下面的命令进入虚拟环境:
conda activate llamacpp
然后,这里需要将终端的路径切换到llama.cpp的项目目录下,注意,这里一定要切换到llama.cpp的项目目录下:
切换到项目目录下以后,我们开始安装环境。这里首先需要安装pytouch,大家可以看下面的pytouch安装教程:
pytouch安装教程:[python]如何正确的安装pytorch?(详细)_pytorch安装-CSDN博客
当然,如果你是小白,不清楚pytouch的GPU与CPU版,也可以跳过此步。直接在下面使用安装命令安装CPU版的touch。
我们可以在llama.cpp的项目目录下执行下面的命令安装依赖:
pip install -r .\requirements.txt
安装完成,没有错误的话,llama.cpp的相关依赖就安装完成了:
至此,llama.cpp的相关依赖就安装完成了。
4.模型的下载
模型的下载之前在部署DeepSeek的教程中已经讲得很详细了,如果你还不知道如何下载模型,可以去看上一篇教程:
DeepSeek部署:[AI]从零开始的DeepSeek本地部署及本地API调用教程-CSDN博客
这里模型下载同样使用hf-mirror,地址如下:HF-Mirror
这里主要教大家如何拉取非GGUF格式的模型。GGUF格式的模型只有一个文件,直接下载即可,但是我们之前介绍了两种特殊模型权重文件还附带了一堆的配置文件,我们需要将这些配置文件也下载下来,假如下面是一个我想下载的模型:
这里就可以直接点击如图所示的三个点:
在出现的选项中选择第一个,这表示要克隆这个模型:
随后使用中间的git命令进行克隆即可:
如果这里没安装git需要自行安装一下,安装过程并不复杂,大家自行安装即可。安装完git就可以使用git命令了。如果git拉取大文件比较慢,可以直接复制大文件的链接然后直接下载。
当我们克隆完成一个模型,就能得到这样一个模型文件夹:
这个文件夹中,就包含了模型的权重文件以及配置文件:
至此,模型的下载就已经完成了。
5.使用llama.cpp进行模型转换
当我们准备好上面的环境以后,就可以进行模型转换了。首先需要将我们拉取的模型文件夹复制到llama.cpp的“models”文件夹下,这里我就用我已经下载好的“DeepSeek-R1-Distill-Qwen-7B”模型举例:
这里要注意是将整个模型文件夹都复制过来,并且注意路径不要弄错了。
然后我们这里进入虚拟环境,然后在llama.cpp的项目目录下执行下面的命令,模型格式的转换就开始了:
python convert_hf_to_gguf.py models/DeepSeek-R1-Distill-Qwen-7B
这里的“convert_hf_to_gguf.py”表示调用的python脚本。这个脚本就放在了llama.cpp的项目根目录下。然后“models/DeepSeek-R1-Distill-Qwen-7B”表示我模型存放的路径,这里的路径要根据你文件夹的名字来定,不一定和我一样。
输入命令回车以后,模型转换就开始了,如果你回车以后,被提示缺少xxx库,那就说明环境没有装好,可以尝试重新安装依赖:
模型转换完成以后,我们就可以看到,这里转换后的模型已经被输出到了模型文件夹下:
去到模型文件夹下,就可以看到这个GGUF格式的模型了:
至此,我们的模型转换就完成了。这里生成出来的GGUF格式的模型在Ollama,LM Studio中同样适用。
五、使用llama.cpp量化模型
现在我们就可以对GGUF格式的模型进行量化了。这里首先你需要确定自己已经部署好了llama.cpp。现在我们开始吧!
这里就使用我刚才已经输出的GGUF模型进行演示,我的模型路径为“models\DeepSeek-R1-Distill-Qwen-7B\DeepSeek-R1-Distill-Qwen-7B-F16.gguf”。
这里我们要量化模型需要去到llama.cpp可执行文件的目录。不管是自己编译的llama.cpp还是下载的预编译版的llama.cpp。都需要去到可执行文件的目录,其实就是有一堆exe文件的目录,如图:
在可执行文件目录下,打开终端,使用下面的命令就可以进行模型的量化了。注意,你用我的命令不一定可以直接运行,需要一些修改,请看下面我对命令的说明:
.\llama-quantize.exe e://openproject/llama.cpp/models/DeepSeek-R1-Distill-Qwen-7B\DeepSeek-R1-Distill-Qwen-7B-F16.gguf e://openproject/llama.cpp/models/DeepSeek-R1-Distill-Qwen-7B\DeepSeek-R1-Distill-Qwen-7B-Q4.gguf Q4_K_S
这里的“.\llama-quantize.exe”表示使用当前目录下的“llama-quantize.exe”程序,因为我们就在可执行目录下,所以直接写“.\”。“e://openproject/llama.cpp/models/DeepSeek-R1-Distill-Qwen-7B\DeepSeek-R1-Distill-Qwen-7B-F16.gguf”表示模型的路径,我的模型放在了这个路径下,所以命令是这样,你可以根据自己的模型路径来写命令。“e://openproject/llama.cpp/models/DeepSeek-R1-Distill-Qwen-7B\DeepSeek-R1-Distill-Qwen-7B-Q4.gguf”表示输出模型的路径,可以在输出这里修改被量化后模型的名字,这里将模型后面的F16改为了Q4,表示这个模型使用了Q4的量化算法。最后面的“Q4_K_S”表示量化算法。
如果你不知道有哪些量化算法可用,在终端中直接执行下面的命令就可以看到所有的量化算法了:
.\llama-quantize.exe
综上所示,模型量化命令的大致格式为:
.\llama-quantize.exe 输入模型的路径 输出模型的路径 量化算法
输入命令回车以后,量化就开始了:
量化结束以后,被量化过的模型,就被输出到了我们指定的目录下:
至此,我们使用llama.cpp进行模型量化就已经完成了。
六、使用llama.cpp运行GGUF格式模型
llama.cpp本身也是可以运行模型的,这里同样的我们前往可执行文件目录:
在可执行目录下,输入下面的命令就可以运行相关的模型了:
.\llama-cli.exe -m e://openproject/llama.cpp/models/DeepSeek-R1-Distill-Qwen-7B/DeepSeek-R1-Distill-Qwen-7B-Q4.gguf -n 2048
这里的“.\llama-cli.exe”同样表示当前目录下的可执行文件。后面的“-m”表示指定模型的路径,再后面的“e://openproject/llama.cpp/models/DeepSeek-R1-Distill-Qwen-7B/DeepSeek-R1-Distill-Qwen-7B-Q4.gguf”就是我们模型的路径了,大家替换成自己GGUF文件所在的路径即可。后面的-n表示上下文最大的token数,这里我们这里指定的是2048。回车以后,模型就开始运行了:
随后,我们就可以和模型进行对话了:
这样,我们使用llama.cpp运行GGUF格式的模型就已经完成了。
七、结语
本次教程,教了大家如何部署llama.cpp以及如何使用llama.cpp运行,转换,量化模型。当然llama.cpp的强大远不止这些,剩下的,就留给大家自己探索吧,那么最后,感谢大家的观看!
相关文章:
[AI]从零开始的llama.cpp部署与DeepSeek格式转换、量化、运行教程
一、前言 在上一次的DeepSeek的部署教程中,我们使用Ollama与LM Studio很轻松的部署了DeepSeek并且也完成了相关API的调用,如果还有不会的小伙伴请看下面的教程: DeepSeek本地部署:[AI]从零开始的DeepSeek本地部署及本地API调用教…...
#define宏与编译时定义的本质对决:从const常量到typedef的类型安全演进
目录 一、#define宏与const常量的本质差异:从文本替换到类型安全的编程抉择 1. 预处理阶段的文本替换(#define) 2. 编译时的类型安全(const) 3. 跨文件访问的限制 4. 代码示例对比 5. 最佳实践 总结表 二、类型…...
【天地图】绘制、删除点线面
使用天地图绘制、删除点线面 实现效果图地图组件完整代码使用地图组件完整代码 实现效果图 地图组件完整代码 // 天地图组件 <template><div class"map-container"><div id"mapCon"></div></div> </template><scri…...
2025年:边缘计算崛起下运维应对新架构挑战
一、引言 随着科技的飞速发展,2025年边缘计算正以前所未有的速度崛起,给运维行业带来了全新的架构挑战。在这个充满机遇与挑战的时代,美信时代公司的美信监控易运维管理软件成为运维领域应对这些挑战的有力武器。 二、边缘计算崛起带来的运维…...
【docker知识】快速找出服务器中占用内存较高的容器
本文由Markdown语法编辑器编辑完成。 1.背景: 近期在处理现场问题,观察服务器时,会遇到某些进程占用较高内存的情况。由于我们的服务,基本上都是以容器的方式在运行,因此就需要找到,到底是哪个容器&#…...
SQL联合查询
文章目录 MySQL系列:1.内连接2.外连接3.自连接4.子查询5.合并查询6.插入查询 MySQL系列: 初识MySQL,MySQL常用数据类型和表的操作,增删改查(CRUD)操作(总),数据库约束数据库设计 #班级表 drop table if exists class; create ta…...
cameralib 安装
目录 linux安装: 测试安装是否成功: linux安装: pip install githttps://github.com/isarandi/cameralib.git pip install githttps://github.com/isarandi/boxlib.git pip install githttps://github.com/isarandi/poseviz.git githttps…...
Windows软件自动化利器:pywinauto python
Pywinauto WindowsAPP UI自动化 Windows软件自动化利器:pywinauto python...
清华大学《DeepSeek:从入门到精通》
近日,清华大学新闻与传播学院新媒体研究中心元宇宙文化实验室发布了由余梦珑博士后及其团队撰写的《DeepSeek:从入门到精通》手册。这份长达104页的指南,旨在帮助用户全面掌握国产通用人工智能平台DeepSeek的核心功能与应用技巧。 DeepSeek简…...
网易易盾接入DeepSeek,数字内容安全“智”理能力全面升级
今年农历新年期间,全球AI领域再度掀起了一波革命性浪潮,国产通用大模型DeepSeek凭借其强大的多场景理解与内容生成能力迅速“出圈”,彻底改写全球人工智能产业的格局。 作为国内领先的数字内容风控服务商,网易易盾一直致力于探索…...
天童美语:观察你的生活
在孩子的认知里,世界宛如一片充满神秘色彩的未知之境,有着无尽的奥秘等待他们去探索。家长们,引导孩子用心观察世界,领略其中的美妙,这对孩子的成长进程有着极为关键的作用。贵阳天童教育相信:观察生活&…...
易仓科技ai面试
请解释PHP中的面向对象编程的基本概念,并举例说明如何在PHP中定义一个类。 回答思路:需理解类、对象、继承和多态等基本概念,并能通过实例代码展示如何定义类及其属性和方法。 . 类(Class) 类是一个封装了数据和操作…...
MySQL-SQL
1.客户端内置命令 客户端内置命令客户端独有,可能不同数据库产品的客户端内置命令存在很大差异,不像SQL命令有标准规范。 help \h ? \? 这四个命令都可以输出帮助文档查看客户端内置命令 ?(\?)“帮助”…...
基础连接已经关闭: 服务器关闭了本应保持活动状态的连接
您在进行 HTTP 请求时遇到“基础连接已经关闭: 服务器关闭了本应保持活动状态的连接”的错误,这通常与连接的保持活动(Keep-Alive)设置有关。以下是可能的原因和解决方法: 可能的原因: Keep-Alive 设置: 默…...
【React组件通讯双重视角】函数式 vs 类式开发指南
目录 前言 正文 父组件向子组件传值 函数式写法 类式写法 子组件向父组件传值 函数式写法 类式写法 兄弟组件通信 函数式写法 类式写法 跨层级通信(使用Context) 函数式写法 类式写法 进阶通讯方式(补充说明…...
开源项目Perplexica-master
一个和https://www.perplexity.ai/差不多的开源项目 大模型的key可以用groq的,免费(https://console.groq.com/keys),有速率限制 项目clone后,修改配置,项目根目录config.toml 填写对应的大模型的key就行…...
数值积分:通过复合梯形法计算
在物理学和工程学中,很多问题都可以通过数值积分来求解,特别是当我们无法得到解析解时。数值积分是通过计算积分区间内离散点的函数值来近似积分的结果。在这篇博客中,我将讨论如何使用 复合梯形法 来进行数值积分,并以一个简单的…...
DeepSeek全生态接入指南:官方通道+三大云平台
DeepSeek全生态接入指南:官方通道三大云平台 一、官方资源入口 1.1 核心交互平台 🖥️ DeepSeek官网: https://chat.deepseek.com/ (体验最新对话模型能力) 二、客户端工具 OllamaChatboxCherry StudioAnythingLLM …...
shell脚本的一些学习笔记----(三)流程控制
1.条件判断 if单条件判断 if [ 条件判断式 ] then 语句块 fi 案例1:统计根分区使用率 [rootlocalhost ~]$ vi sh/if1.sh #!/bin/bash #把根分区使用率作为变量值赋予变量rate rate$(df -h | grep "/dev/sda1" | awk {print $5}’| cut -d "%"-f…...
Docker Desktop WebAPI《1》
方法1 》》生成 的文档不要动, 》》执行 Container(Dockerfile) 会生成镜像文件和容器 》》生成的镜像和容器 在 Docker Desktop 中可以查看 用VS 的 Container Dockerfile 调试 但把这个调试工工具 停止,WebAPi就不能访问了 …...
Linux驱动层学习:LED 驱动开发
前置知识: 1、地址映射 MMU 全称叫做 Memory Manage Unit,也就是内存管理单元。 MMU 主要完成的功能如下: ①、完成虚拟空间到物理空间的映射。 ②、内存保护,设置存储器的访问权限,设置虚拟存储空间的缓冲特性。 第…...
全面解析鸿蒙(HarmonyOS)开发:从入门到实战,构建万物互联新时代
文章目录 引言 一、鸿蒙操作系统概述二、鸿蒙开发环境搭建三、鸿蒙核心开发技术1. **ArkUI框架**2. **分布式能力开发**3. **原子化服务与元服务** 四、实战案例:构建分布式音乐播放器五、鸿蒙开发工具与调试技巧六、鸿蒙生态与未来展望结语 引言 随着万物互联时代…...
zyNo.23
SQL注入漏洞 1.SQL语句基础知识 一个数据库由多个表空间组成,sql注入关系到关系型数据库,常见的关系型数据库有MySQL,Postgres,SQLServer,Oracle等 以Mysql为例,输入 mysql-u用户名-p密码 即可登录到MySQL交互式命令行界面。 既然是…...
调用DeepSeek API接口:实现智能数据挖掘与分析
在当今数据驱动的时代,企业和开发者越来越依赖高效的数据挖掘与分析工具来获取有价值的洞察。DeepSeek作为一款先进的智能数据挖掘平台,提供了强大的API接口,帮助用户轻松集成其功能到自己的应用中。本文将详细介绍如何调用DeepSeek API接口&…...
【Linux】Ubuntu Linux 系统——Node.js 开发环境
ℹ️大家好,我是练小杰,今天星期五了,同时也是2025年的情人节,今晚又是一个人的举个爪子!! 🙂 本文是有关Linux 操作系统中 Node.js 开发环境基础知识,后续我将添加更多相关知识噢&a…...
Redis7——基础篇(一)
前言:此篇文章系本人学习过程中记录下来的笔记,里面难免会有不少欠缺的地方,诚心期待大家多多给予指教。 基础篇: Redis(一) 一、Redis定义 官网地址:Redis - The Real-time Data Platform R…...
MySQL查看存储过程和存储函数
【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客 《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…...
js实现点击音频实现播放功能
目录 1. HTML 部分:音频播放控件 2. CSS 部分:样式设置 3. JavaScript 部分:音频控制 播放和暂停音频: 倒计时更新: 播放结束后自动暂停: 4. 总结: 完整代码: 今天通过 HTML…...
Ubuntu安装docker:docker-desktop : 依赖: docker-ce-cli 但无法安装它、无法定位软件包 docker-ce-cli
具体错误 sudo apt-get install ./docker-desktop-amd64.deb [sudo] password for weiyu: 正在读取软件包列表... 完成 正在分析软件包的依赖关系树... 完成 正在读取状态信息... 完成 注意,选中 docker-desktop 而非 ./docker-desktop-amd64.de…...
免费deepseek的API获取教程及将API接入word或WPS中
免费deepseek的API获取教程: 1 https://cloud.siliconflow.cn/中注册时填写邀请码:GAejkK6X即可获取2000 万 Tokens; 2 按照图中步骤进行操作 将API接入word或WPS中 1 打开一个word,文件-选项-自定义功能区-勾选开发工具-左侧的信任中心-信任中心设置…...
华为交换机堆叠配置
华为交换机堆叠(Stack)技术是一种将多台物理交换机虚拟化为单一逻辑设备的高可靠性解决方案,可简化网络管理、提升带宽利用率并增强冗余能力。 一、堆叠的核心概念 堆叠系统组成:主交换机(Master)…...
基于Java SpringBoot以及vue前后端分离的旅游景区网站系统设计与实现
基于Java SpringBoot以及vue前后端分离的旅游景区网站系统设计与实现 本项目是一款基于Spring Boot和Vue.js开发的旅游景区管理系统,前端合后端的架构,支持用户在线浏览景区信息、预订门票,并提供完善的后台管理功能,包括订单管理…...
DeepSeek教unity------MessagePack-04
Union 联合 MessagePack for C# 支持序列化接口类型和抽象类类型的对象。它的行为类似于 XmlInclude 或 ProtoInclude。在 MessagePack for C# 中,这些被称为Union。只有接口和抽象类可以被 Union 属性注解。需要唯一的联合键。 /******************************…...
侯捷 C++ 课程学习笔记:C++ 新标准 11/14 的革新与实战应用
在侯捷老师的 C 系列课程中,《C 新标准 11/14》这门课程让我对现代 C 编程有了全新的认识。C11 和 C14 是 C 语言发展史上的重要里程碑,它们引入了大量新特性,极大地提升了语言的表达能力和开发效率。侯捷老师通过深入浅出的讲解和丰富的实战…...
MATLAB图像处理:Sobel、Roberts、Canny等边缘检测算子
边缘是图像中像素值剧烈变化的区域,反映了目标的轮廓、纹理等关键信息。边缘检测是图像分割、目标识别等任务的基础。本文将系统解析 六种经典边缘检测算子 的数学原理、实现方法及适用场景,并给出完整的MATLAB代码示例和对比分析。 1. 边缘检测基础 1…...
Python Pandas(7):Pandas 数据清洗
数据清洗是对一些没有用的数据进行处理的过程。很多数据集存在数据缺失、数据格式错误、错误数据或重复数据的情况,如果要使数据分析更加准确,就需要对这些没有用的数据进行处理。数据清洗与预处理的常见步骤: 缺失值处理:识别并…...
基于javaweb的SpringBootoa办公自动化系统设计和实现(源码+文档+部署讲解)
🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 运行环境开发工具适用功能说明部分代码展示 运行环境 Java≥8、MySQL≥5.7 开发工具 eclipse/idea/myeclipse/sts等均可配置运行…...
算法08-递归调用转为循环的通用方法
前导:问题引入 在Python中,递归调用过多会导致“递归深度过深”的错误,通常是因为递归没有正确终止条件或者递归层次太深。 这种错误通常会导致程序抛出 RecursionError 异常。 Python默认的递归深度限制大约是1000层(可以通过sys.getrecursionlimit()查看)。 修正方式…...
[qt5学习笔记]用vs2022(msvc2017)+copilot进行QtWidgetsApplication源码解析
一直没深入了解qt,又一段时间没写qt,重新捡起来。 开发环境 本地vs2022(msvc2017, v14.30)先升级到最新版本,方便使用copilot。 参考 VS2022QT5环境搭建 下载 qt5.14.2 用vs的qt插件设置qt5.14.2x86路径,x64版本未安装。 创建一…...
Nginx--日志(介绍、配置、日志轮转)
前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 一、Nginx日志介绍 nginx 有一个非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志, 所需日志模块 ngx_http_log_module 的…...
Transformer 模型介绍(一)——综述
Transformer 是一种完全基于注意力机制的神经网络模型,首次在2017年的论文《Attention Is All You Need》中提出。该模型最初用于机器翻译任务,并在特定任务中表现优于谷歌的其他神经网络机器翻译模型。Transformer 也是 Seq2Seq(序列到序列&…...
Ceph集群搭建2025(squid版)
squid版本维护年限 apt install -y cephadmecho >> "deb http://mirrors.163.com/ceph/debian-squid/ bookworm main" echo >> "deb-src http://mirrors.163.com/ceph/debian-squid/ bookworm main"#安装源 cephadm install #开始初始化一个最…...
封装neo4j的持久层和服务层
目录 持久层 mp 模仿: 1.抽取出通用的接口类 2.创建自定义的repository接口 服务层 mp 模仿: 1.抽取出一个IService通用服务类 2.创建ServiceImpl类实现IService接口 3.自定义的服务接口 4.创建自定义的服务类 工厂模式 为什么可以使用工厂…...
HTML 简介
1.什么是 HTML? 超文本:暂且简单理解为 “超级的文本”,和普通文本比,内容更丰富。 标 记:文本要变成超文本,就需要用到各种标记符号。 语 言:每一个标记的写法、读音、使用规则,…...
【AWS】EC2 安全组设置
在使用 Amazon Web Services (AWS) 的 EC2 实例时,很多用户会遇到关于 安全组 设置的问题,尤其是在创建或修改安全组时输入描述信息时。最近,有一个常见的错误是当用户在 EC2 安全组 配置中添加描述时,使用了中文字符,…...
git bisect 使用二分法查找引入错误的提交
git bisect 使用二分法查找引入错误的提交 Git bisect 命令官方文档 git bisect 这个命令使用二分搜索算法来查找项目历史中哪个提交引入了一个错误 使用该命令时,首先告诉它一个已知包含错误的 “坏” 提交 以及一个已知在错误出现之前的 “好” 提交 然后 git b…...
STM32 Flash详解教程文章
目录 Flash基本概念理解 Flash编程接口FPEC Flash擦除/写入流程图 Flash选项字节基本概念理解 Flash电子签名 函数读取地址下存放的数据 Flash的数据处理限制部分 编写不易,请勿搬运,感谢理解!!! Flash基本概念…...
业务开发 | 基础知识 | Maven 快速入门
Maven 快速入门 1.Maven 全面概述 Apache Maven 是一种软件项目管理和理解工具。基于项目对象模型的概念(POM),Maven 可以从中央信息中管理项目的构建,报告和文档。 2.Maven 基本功能 因此实际上 Maven 的基本功能就是作为 Ja…...
Python实现从SMS-Activate平台,自动获取手机号和验证码(进阶版2.0)
前言 本文是该专栏的第52篇,后面会持续分享python的各种干货知识,值得关注。 在本专栏之前,笔者在文章《Python实现SMS-Activate接口调用,获取手机号和验证码》中,有详细介绍基于SMS-Activate平台,通过python来实现自动获取目标国家的手机号以及对应的手机号验证码。 而…...
网络安全 | 安全信息与事件管理(SIEM)系统的选型与实施
网络安全 | 安全信息与事件管理(SIEM)系统的选型与实施 一、前言二、SIEM 系统的功能概述2.1 数据收集与整合2.2 实时监控与威胁检测2.3 事件响应与自动化2.4 合规性管理 三、SIEM 系统选型的关键因素3.1 功能需求评估3.2 可扩展性与性能3.3 易用性与可维…...