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

[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调用教…...

vLLM专题(二):安装-CPU

vLLM 是一个 Python 库,支持以下 CPU 变体。选择您的 CPU 类型以查看供应商特定的说明: Intel/AMD x86 vLLM 最初支持在 x86 CPU 平台上进行基本模型推理和服务,支持的数据类型包括 FP32、FP16 和 BF16。 注意 此设备没有预构建的 wheel 包或镜像,因此您必须从源代码构建 v…...

JVM 底层探秘:对象创建的详细流程、内存分配机制解析以及线程安全保障策略

文章目录 1. 类加载检查2. 内存分配① 指针碰撞② 空闲列表线程安全问题: 3. 内存空间初始化4. 对象头设置5. 对象初始化 当Java虚拟机遇到一条 new指令时,会执行以下步骤来创建对象: 1. 类加载检查 首先检查new指令的参数是否能在常量池中…...

【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter14-DOM

十四、DOM 文档对象模型(DOM,Document Object Model)是 HTML 和 XML 文档的编程接口。DOM 表示由多层节点构成的文档,通过它开发者可以添加、删除和修改页面的各个部分。脱胎于网景和微软早期的动态 HTML(DHTML&#x…...

外汇掉期(FX Swap):全球企业管理外汇风险的关键工具(中英双语)

外汇掉期(FX Swap):全球企业管理外汇风险的关键工具 引言 在全球化经济环境下,跨国公司、银行和金融机构经常面临外汇风险,因为它们的业务涉及多种货币。例如,一家中国公司可能需要欧元支付欧洲供应商&am…...

verilog程序设计及SystemVerilog验证

1.Verilog测试程序设计基础 1.1Testbench及其结构 在仿真的时候Testbench用来产生测试激励给待验证设计( Design Under Verification, DUV),或者称为待测设计(Design UnderTest, DUT) 。 测试程序的一般结构: Testbench是一个测试平台,信号…...

Unity DeepSeek API 聊天接入教程(0基础教学)

Unity DeepSeek API 聊天接入教程(0基础教学) 1.DeepSeek 介绍 DeepSeek是杭州深度求索人工智能基础技术研究有限公司推出的一款大语言模型。2025年1月20日,DeepSeek-R1正式上线,和当前市面上的主流AI相比,它在仅有极少标注数据的情况下&am…...

力扣 乘积最大子数组

动态规划,注意负负得正,dp交换。 题目 注意这里的dp的乘积要求最大,而两个很大的负数相乘也是大的,因此在每遍历到一个数时要存一个最大值的dp与一个最小值的dp,然后遍历完后再去存ans的dp。由于存在负数,…...

ABP - 事件总线之分布式事件总线

ABP - 事件总线之分布式事件总线 1. 分布式事件总线的集成1.2 基于 RabbitMQ 的分布式事件总线 2. 分布式事件总线的使用2.1 发布2.2 订阅2.3 事务和异常处理 3. 自己扩展的分布式事件总线实现 事件总线可以实现代码逻辑的解耦,使代码模块之间功能职责更清晰。而分布…...

osgearth控件显示中文(八)

当前自己知道的方法大概有以下两种: (一)直接转成utf8 其实在前面的文章中已经有了。 osgEarth::Annotation::PlaceNode *pn = new osgEarth::Annotation::PlaceNode(GeoPoint(geoSRS, 110, 34), String2UTF8("中国"), style);std::wstring String2Wstring(con…...

基于opencv的 24色卡IQA评测算法源码-可完全替代Imatest

1.概要 利用24色卡可以很快的分析到曝光误差,白平衡误差,噪声,色差,饱和度,gamma值。IQA或tuning工程一般用Imatest来手动计算,不便于产测部署,现利用opencv实现了imatest的全部功能&#xff0c…...

webpack打包优化策略

1. 减少打包体积 减少打包文件的大小是为了提高加载速度,降低网络带宽消耗,提升用户体验。常见的减少打包体积的优化策略包括: 代码分割(Code Splitting):将代码拆分成多个小文件,让浏览器按需…...

Kafka日志数据深度解析:从基础查看到高级操作全攻略

#作者:孙德新 文章目录 查看log日志文件(kafka-dump-log.sh)1、查看Log文件基本数据信息2、index文件健康性检查(--index-sanity-check)3、转储文件(--max-message-size)4、偏移量解码(--offsets-decoder)5、日志数据解析(--transaction-log-decoder)6、查询Log文件…...

DeepSeek-R1使用生存指南

文章目录 1.为什么普通人一定要使用DeepSeek2.DeepSeek的几种使用方式2.1网页端直接使用2.2手机端app使用2.3其他第三方平台 3.网页端按钮的说明4.正确的提问技巧4.1不要定义过程4.2明确受众4.3记忆时间有限4.4输出长度限制4.5如何清除上下文的记忆 5.几个避坑点5.1冗长提示词污…...

Code::Blocks 创建 C 项目 二

Code::Blocks 创建 C 项目 二 Code::Blocks 安装请看 Code::Blocks 安装 启动 Code Blocks 选择 Create a new project 弹出界面选择 Projects -> Console application -> Go 选择 C :表示创建的是 C 语言项目 点击 Next Project title:项目名 …...

pyqt写一个待办程序

ToDoApp 框架选择 一个简单的GUI程序,可以使用pyqt完成。pyqt是qt的python实现版本。 界面搭建 设计一个美观 简洁的界面 class ToDoApp(QWidget):def __init__(self):super().__init__()# 设置窗口属性self.setWindowTitle("Daily To Do List")self…...

总结前端常用数据结构 之 数组篇【JavaScript -包含常用数组方法】

【亲爱的读者,爱博主记得一键三连噢噢ooo~~ 啾咪】 创建数组: 以字面量的形式创建新数组:let arr1 [1, 2, 3];通过 Array 构造函数并传入一组元素(4,5,6)来创建一个新数组:let arr2 new Array(4, 5, 6);…...

利率掉期(Interest Rate Swap):运作原理、收益模式及市场角色解析(中英双语)

利率掉期(Interest Rate Swap):运作原理、收益模式及市场角色解析 引言 利率掉期(Interest Rate Swap, IRS) 是金融市场中最常见的衍生品之一,它允许两方交换固定利率和浮动利率,以优化融资成…...

Mac 开发工具推荐

Homebrew 软件安装管理必备神器,相当于 Linux 上的 yum,安装了homebrew之后,以下软件都可以通过brew cask install 和 brew install进行直接安装 IntelliJ IDEA Java开发ide 相关插件: 1)lombok 2)Aliba…...

NCHAR_CS和CHAR_CS,导致UNION ALL 时,提示SQL 错误 [12704] [72000]: ORA-12704: 字符集不匹配

检查涉及的数据表和列的字符集设置 -- 查询表的字符集 SELECT parameter, value FROM nls_database_parameters WHERE parameter LIKE NLS_CHARACTERSET;-- 查询列的字符集(对于特定表) SELECT column_name, character_set_name FROM all_tab_columns W…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

HTML 列表、表格、表单

1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...