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

7D-AI系列:模型微调之mlx-lm

大模型的出现,导致信息量太大,只有静心动手操作,才能得到真理。

文章目录

    • 环境要求
    • 安装
    • 示例
    • mlx-lm微调工具参数
    • 准备数据集
    • 下载模型
    • 微调模型
    • 合并模型
    • 验证结果
      • 验证微调前的模型
      • 验证微调后的模型

环境要求

  • macbook pro m系列芯片
  • mlx环境已安装

安装

mlx-lm微调工具是一个用于微调基于mlx框架的预训练语言模型(LM)的工具。该工具提供了多种功能,包括预训练语言模型的微调、模型保存和加载、模型评估等功能。

(mlx) gaolou@GaodeMacBook-Pro mlx-examples % pip install mlx-lm

示例

当使用 generate 命令且不指定模型时,会自动下载 models--mlx-community--Llama-3.2-3B-Instruct-4bit 模型。并保在 /Users/gaolou/.cache/huggingface/hub 中。

(mlx) gaolou@GaodeMacBook-Pro mlx-examples % mlx_lm.generate --prompt "How tall is Mt Everest?"
special_tokens_map.json: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████| 296/296 [00:00<00:00, 2.87MB/s]
config.json: 1.12kB [00:00, 2.42MB/s]                                                                                                                             
tokenizer_config.json: 54.6kB [00:00, 66.4MB/s]                                                                                         | 1/6 [00:00<00:04,  1.04it/s]
model.safetensors.index.json: 45.7kB [00:00, 124MB/s]
tokenizer.json: 17.2MB [00:01, 16.9MB/s]
model.safetensors: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████| 1.81G/1.81G [00:47<00:00, 37.7MB/s]
Fetching 6 files: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:52<00:00,  8.78s/it]
==========
Mt. Everest is approximately 8,848 meters (29,029 feet) tall.
==========
Prompt: 41 tokens, 101.355 tokens-per-sec
Generation: 19 tokens, 120.663 tokens-per-sec
Peak memory: 1.937 GB
(mlx) gaolou@GaodeMacBook-Pro mlx-examples %

mlx-lm微调工具参数

(mlx) gaolou@GaodeMacBook-Pro mlx-lm % mlx_lm.lora --help                                  
usage: mlx_lm.lora [-h] [--model MODEL] [--train] [--data DATA] [--fine-tune-type {lora,dora,full}] [--optimizer {adam,adamw}] [--mask-prompt][--num-layers NUM_LAYERS] [--batch-size BATCH_SIZE] [--iters ITERS] [--val-batches VAL_BATCHES] [--learning-rate LEARNING_RATE][--steps-per-report STEPS_PER_REPORT] [--steps-per-eval STEPS_PER_EVAL] [--resume-adapter-file RESUME_ADAPTER_FILE] [--adapter-path ADAPTER_PATH][--save-every SAVE_EVERY] [--test] [--test-batches TEST_BATCHES] [--max-seq-length MAX_SEQ_LENGTH] [-c CONFIG] [--grad-checkpoint] [--seed SEED]
LoRA or QLoRA finetuning.
options:-h, --help            show this help message and exit--model MODEL         The path to the local model directory or Hugging Face repo.--train               Do training--data DATA           Directory with {train, valid, test}.jsonl files or the name of a Hugging Face dataset (e.g., 'mlx-community/wikisql')--fine-tune-type {lora,dora,full}Type of fine-tuning to perform: lora, dora, or full.--optimizer {adam,adamw}Optimizer to use for training: adam or adamw--mask-prompt         Mask the prompt in the loss when training--num-layers NUM_LAYERSNumber of layers to fine-tune. Default is 16, use -1 for all.--batch-size BATCH_SIZEMinibatch size.--iters ITERS         Iterations to train for.--val-batches VAL_BATCHESNumber of validation batches, -1 uses the entire validation set.--learning-rate LEARNING_RATEAdam learning rate.--steps-per-report STEPS_PER_REPORTNumber of training steps between loss reporting.--steps-per-eval STEPS_PER_EVALNumber of training steps between validations.--resume-adapter-file RESUME_ADAPTER_FILELoad path to resume training from the given fine-tuned weights.--adapter-path ADAPTER_PATHSave/load path for the fine-tuned weights.--save-every SAVE_EVERYSave the model every N iterations.--test                Evaluate on the test set after training--test-batches TEST_BATCHESNumber of test set batches, -1 uses the entire test set.--max-seq-length MAX_SEQ_LENGTHMaximum sequence length.-c CONFIG, --config CONFIGA YAML configuration file with the training options--grad-checkpoint     Use gradient checkpointing to reduce memory use.--seed SEED           The PRNG seed
(mlx) gaolou@GaodeMacBook-Pro mlx-lm % 

准备数据集

在用mlx_lm.lora 微调工具微调模型时,需要准备数据集。数据集可以是一个目录,包含 train.jsonl、valid.jsonl和test.jsonl文件,也可以是一个Hugging Face数据集。数据要超过5条。

示例如下:


{"prompt": "你是谁?","completion": "我是7DRESAR性能分析决策模型,我可以帮助你分析系统的性能问题,给出性能分析证据链,并提供相应的解决方案。"}
{"prompt": "如何分析操作系统中用户态CPU使用率高的根本原因?","completion": "根据7DRESAR性能分析决策树模型,分析us cpu使用率高根本原因的步骤如下:1. 首先要明确是us cpu使用率,而非其他cpu计数器。2. 然后查看us cpu消耗在哪个进程上。3, 再进一步根据进程号查看是哪一个线程消耗了us cpu。注意:如果不是某一个特定线程一直消耗us cpu,而是有多个线程消耗cpu,并且线程号在不断切换,则需要判断线程数设置是否合理。4. 当明确了某个线程消耗了us cpu之后,再多次打印线程栈,以确定正在执行的代码。5. 最后根据线程栈信息,确定是哪个代码片段消耗了us cpu。在java的应用中,可以用arthas之类的工具来跟踪方法的执行时间,其他的语言中也有类似的工具。"}
{"prompt": "如何分析操作系统中磁盘IO使用率高的根本原因?","completion": "根据7DRESAR性能分析决策树模型,分析磁盘IO使用率高的根本原因步骤如下:1. 首先要明确磁盘本身顺序、随机读写能力的上下限。也就是需要根据基准测试确定磁盘的最大读写能力。2. 然后查看磁盘IO消耗在哪个线程上。这一步在linux中可以直接通过iotop命令做到。3. 可以直接打线程栈,查看是哪一段代码在读写文件。4. 根据读写文件的逻辑,判断是否需要增加读写buffer的大小。5. 若读写文件不合理,则减少读写。"}
{"prompt": "如何分析操作系统中内存使用率高的根本原因?","completion": "根据7DRESAR性能分析决策树模型,分析内存率高的根本原因步骤如下:1. 对于java语言的应用,查看jvm的gc状态;对于其他语言开发的应用,则分析物理内存的使用情况。2. 若物理内存使用率高,在linux中可以使用top -Hp pid命令查看进程中哪个线程消耗了内存。3. 可以直接打线程栈,查看是哪一段代码在申请内存。4. 若申请内存不合理,则减少内存申请。5. 若内存申请合理,则需要考虑增加节点或内存。"}
{"prompt": "如何分析操作系统中网络是否阻塞?","completion": "根据7DRESAR性能分析决策树模型,分析网络是否阻塞步骤如下:1. 在linux中通过命令netstat查看recvq和sendq是否有积压。2. 若本机recvq有积压,则是阻塞在本机。3. 若是sendq有积压,则需要查看tcp连接的对端recvq是否也有积压,若有,则需要分析对端recvq积压的原因。"}
{"prompt": "如何分析操作系统中上下文切换是否合理?","completion": "根据7DRESAR性能分析决策树模型,分析上下文切换是否合理步骤如下:1. 在linux中通过命令vmstat查看上下文切换的次数。2. 若上下文切换次数高,则需要分析上下文切换的原因。3. 若上下文切换的原因是线程数设置不合理,则需要调整线程数。4. 若上下文切换的原因是线程切换的时间片不合理,则需要调整线程切换的时间片。"}

下载模型

你可以到网上下载一个模型权重。这里我之前在本地演示时,训练过的一个模型权重 Qwen2.5-0.5B-Instruct

注意:模型的选择要量力而为。

(mlx) gaolou@GaodeMacBook-Pro DeepSeek-R1-1.5B-7dresar % pwd
/Users/gaolou/Desktop/AI研究/AI模型权重/DeepSeek-R1-1.5B-7dresar
(mlx) gaolou@GaodeMacBook-Pro DeepSeek-R1-1.5B-7dresar % tree -h
[ 320]  .
├── [ 392]  Modelfile
├── [ 812]  config.json
├── [ 181]  generation_config.json
├── [3.3G]  model.safetensors
├── [ 485]  special_tokens_map.json
├── [ 11M]  tokenizer.json
├── [6.7K]  tokenizer_config.json
└── [ 16K]  读取模型文件.md
1 directory, 8 files

微调模型


(mlx) gaolou@GaodeMacBook-Pro mlx-lm % mlx_lm.lora --model /Users/gaolou/.cache/modelscope/hub/models/Qwen/Qwen2.5-0.5B-Instruct --train --data ./dataset
Loading pretrained model
Loading datasets
Training
Trainable parameters: 0.073% (0.360M/494.033M)
Starting training..., iters: 1000
Iter 1: Val loss 3.671, Val took 0.257s
Iter 10: Train loss 3.379, Learning Rate 1.000e-05, It/sec 3.233, Tokens/sec 2062.551, Trained Tokens 6380, Peak mem 3.130 GB
Iter 20: Train loss 2.893, Learning Rate 1.000e-05, It/sec 3.214, Tokens/sec 2050.724, Trained Tokens 12760, Peak mem 3.130 GB
Iter 30: Train loss 2.525, Learning Rate 1.000e-05, It/sec 3.227, Tokens/sec 2058.875, Trained Tokens 19140, Peak mem 3.130 GB
Iter 40: Train loss 2.198, Learning Rate 1.000e-05, It/sec 3.271, Tokens/sec 2086.831, Trained Tokens 25520, Peak mem 3.130 GB
----------删除了部分输出日志------------
Iter 990: Train loss 0.009, Learning Rate 1.000e-05, It/sec 3.205, Tokens/sec 2044.611, Trained Tokens 631620, Peak mem 3.136 GB
Iter 1000: Val loss 0.009, Val took 0.162s
Iter 1000: Train loss 0.009, Learning Rate 1.000e-05, It/sec 3.209, Tokens/sec 2047.448, Trained Tokens 638000, Peak mem 3.136 GB
Iter 1000: Saved adapter weights to adapters/adapters.safetensors and adapters/0001000_adapters.safetensors.
Saved final weights to adapters/adapters.safetensors.
(mlx) gaolou@GaodeMacBook-Pro mlx-lm % 

合并模型

(mlx) gaolou@GaodeMacBook-Pro mlx-lm % mlx_lm.fuse --model /Users/gaolou/.cache/modelscope/hub/models/Qwen/Qwen2.5-0.5B-Instruct --adapter-path ./adapters --save-path Qwen2.5-0.5B-7dresar-v0.1
Loading pretrained model
(mlx) gaolou@GaodeMacBook-Pro mlx-lm % ll
total 88
drwxrwxr-x@ 14 gaolou  staff   448  4 12 03:39 tests
-rw-rw-r--@  1 gaolou  staff  1509  4 12 03:39 setup.py
-rw-rw-r--@  1 gaolou  staff    77  4 12 03:39 requirements.txt
drwxrwxr-x@ 29 gaolou  staff   928  4 12 03:39 mlx_lm
-rw-rw-r--@  1 gaolou  staff  9186  4 12 03:39 README.md
-rw-rw-r--@  1 gaolou  staff    56  4 12 03:39 MANIFEST.in
-rw-rw-r--@  1 gaolou  staff  1066  4 12 03:39 LICENSE
-rw-rw-r--@  1 gaolou  staff  2773  4 12 03:39 CONTRIBUTING.md
-rw-rw-r--@  1 gaolou  staff  5544  4 12 03:39 CODE_OF_CONDUCT.md
-rw-rw-r--@  1 gaolou  staff   640  4 12 03:39 ACKNOWLEDGMENTS.md
drwxr-xr-x@  5 gaolou  staff   160  4 12 16:27 dataset
drwxr-xr-x@ 14 gaolou  staff   448  4 12 16:57 adapters
drwxr-xr-x@  8 gaolou  staff   256  4 12 17:03 DeepSeek-R1-1.5B-7dresar-v0.1
drwxr-xr-x@ 12 gaolou  staff   384  4 12 18:35 DeepSeek-R1-8B-7dresar-v0.1
drwxr-xr-x@ 11 gaolou  staff   352  4 12 19:11 Qwen2.5-0.5B-7dresar-v0.1
(mlx) gaolou@GaodeMacBook-Pro mlx-lm % tree -h Qwen2.5-0.5B-7dresar-v0.1
[ 352]  Qwen2.5-0.5B-7dresar-v0.1
├── [ 605]  added_tokens.json
├── [ 710]  config.json
├── [1.6M]  merges.txt
├── [942M]  model.safetensors
├── [ 20K]  model.safetensors.index.json
├── [ 613]  special_tokens_map.json
├── [ 11M]  tokenizer.json
├── [7.2K]  tokenizer_config.json
└── [2.6M]  vocab.json
1 directory, 9 files
(mlx) gaolou@GaodeMacBook-Pro mlx-lm % 

验证结果

验证微调前的模型


(mlx) gaolou@GaodeMacBook-Pro mlx-lm % mlx_lm.generate --model /Users/gaolou/.cache/modelscope/hub/models/Qwen/Qwen2.5-0.5B-Instruct --max-tokens 1000 --prompt "如何分析操作系统中用户态CPU使用率高的根本原因?"
==========
分析操作系统中用户态CPU使用率高的根本原因,通常需要从以下几个方面进行深入分析:
1. **系统资源使用情况**:首先,需要了解系统的总资源使用情况,包括CPU、内存、磁盘I/O等。如果系统资源使用率过高,可能意味着系统负载过高,需要进一步分析。
2. **进程和线程管理**:检查进程和线程的使用情况。如果某些进程或线程占用大量CPU资源,可能是由于它们的运行状态不稳定或资源分配不当导致的。
3. **内存使用情况**:检查内存使用情况,包括内存的分配和释放。如果内存分配过多或释放不足,可能会导致CPU使用率过高。
4. **磁盘I/O使用情况**:检查磁盘I/O使用情况,包括磁盘的读写速度和磁盘I/O的总请求量。如果磁盘I/O使用率过高,可能是由于磁盘的性能问题或磁盘I/O的调度策略不当导致的。
5. **系统调度和资源管理**:检查系统调度和资源管理的策略,包括进程调度、内存分配和磁盘I/O调度等。如果这些策略不当,可能会导致CPU使用率过高。
6. **系统优化和调整**:根据上述分析,可以考虑对系统进行优化和调整,例如调整进程和线程的调度策略、优化磁盘I/O调度策略、调整内存分配策略等。
7. **系统监控和日志分析**:通过系统监控和日志分析,可以更深入地了解CPU使用率高的原因,包括异常的CPU使用情况、异常的内存使用情况、异常的磁盘I/O使用情况等。
8. **性能测试和优化**:进行性能测试和优化,找出性能瓶颈,然后针对性地进行优化。
通过上述分析和优化,可以有效地解决用户态CPU使用率高的问题,提高系统的性能和稳定性。
==========
Prompt: 42 tokens, 1476.203 tokens-per-sec
Generation: 404 tokens, 194.790 tokens-per-sec
Peak memory: 1.044 GB

验证微调后的模型

(mlx) gaolou@GaodeMacBook-Pro mlx-lm % mlx_lm.generate --model /Users/gaolou/Desktop/AI研究/AI工具集/mlx/mlx-lm/Qwen2.5-0.5B-7dresar-v0.1 --max-tokens 1000 --prompt "如何分析操作系统中用户态CPU使用率高的 根本原因?"
==========
根据7DRESAR性能分析决策树模型,分析us cpu使用率高根本原因的步骤如下:
1. 首先要明确是us cpu使用率,而非其他cpu计数器。
2. 然后查看us cpu消耗在哪个进程上。
3, 再进一步根据进程号查看是哪一个线程消耗了us cpu。注意:如果不是某一个特定线程一直消耗us cpu,而是有多个线程消耗cpu,并且线程号在不断切换,则需要判断线程数设置是否合理。
4. 当明确了某个线程消耗了us cpu之后,再多次打印线程栈,以确定正在执行的代码。
5. 最后根据线程栈信息,确定是哪个代码片段消耗了us cpu。在java的应用中,可以用arthas之类的工具来跟踪方法的执行时间,其他的语言中也有类似的工具。
==========
Prompt: 42 tokens, 1410.335 tokens-per-sec
Generation: 187 tokens, 196.516 tokens-per-sec
Peak memory: 1.044 GB

以上输出,格式有整理,其他没修改。

最后,你想看哪些和AI大模型相关的技术点?可以留言,我们一一拆解。

相关文章:

7D-AI系列:模型微调之mlx-lm

大模型的出现&#xff0c;导致信息量太大&#xff0c;只有静心动手操作&#xff0c;才能得到真理。 文章目录 环境要求安装示例mlx-lm微调工具参数准备数据集下载模型微调模型合并模型验证结果验证微调前的模型验证微调后的模型 环境要求 macbook pro m系列芯片mlx环境已安装 …...

数据可视化:php+echarts实现数据可视化(包含echart安装引入)

一、实现效果 实现动态时间,多列柱状图,单列柱状图,普通表格,表格动画等效果 二、实现 1、动态时间显示 通过php获取当前时间 设置计时器来动态显示时间秒数 <!-- 时间动画 --> <script>// 动态更新时间中的秒数function updateTime() {const now = new D…...

《Python星球日记》 第47天:聚类与KMeans

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 专栏&#xff1a;《Python星球日记》&#xff0c;限时特价订阅中ing 目录 一、聚类与…...

linux(centos)联网情况下部署

nginx部署 1.linux(centos)联网情况下部署 1.下载nginx所需依赖 # 安装开发工具组&#xff08;若未安装&#xff09; sudo yum groupinstall "Development Tools"# 安装 OpenSSL 开发包 sudo yum install openssl-devel# 安装 PCRE 开发包 sudo yum install pcre-…...

Kubernetes生产级资源管理实战:从QoS策略到OOM防御体系

一、资源限制的本质&#xff1a;不是成本控制&#xff0c;而是稳定性保障 当集群中某个节点的内存耗尽时&#xff0c;Kubernetes会像冷酷的交通警察一样&#xff0c;根据Pod的"优先级证件"&#xff08;QoS类别&#xff09;决定哪些Pod需要被驱逐。这种机制直接关系到…...

gcc的使用

gcc 是 GNU Compiler Collection&#xff08;GNU 编译器套件&#xff09;的缩写&#xff0c;是 GNU 项目开发的编程语言编译器集合&#xff0c;支持多种编程语言&#xff08;如 C、C、Objective-C、Fortran、Ada 等&#xff09;。以下是关于 gcc 的核心信息&#xff1a; 1. 主要…...

聊一聊Qwen3思考模式实现以及背后原理探讨

Qwen3思考模式切换实现 硬开关 我们先通过官方的示例代码来体验一下&#xff0c;如何实现在思考模式和非思考模式之间切换 通过tokenizer.apply_chat_template的enable_thinking参数来实现 默认情况下&#xff0c;Qwen3 启用了思考功能&#xff0c;类似于 QwQ-32B。这意味着…...

spark行动算子

在 Apache Spark 中&#xff0c;行动算子&#xff08;Action&#xff09;用于触发对 RDD 的实际计算&#xff0c;并将结果返回给驱动程序&#xff08;Driver&#xff09;或保存到外部存储系统中。与转换算子&#xff08;Transformation&#xff09;不同&#xff0c;行动算子会立…...

电商双十一美妆数据分析(代码)

import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import jieba # 数据读取 df pd.read_csv(双十一_淘宝美妆数据.csv) # 数据清洗 # 处理重复值 data df.drop_duplicates(inplaceFalse) data data.reset_index(in…...

STM32裸机开发问题汇总

一、代码编写 1. keil中某个文件无法修改 keil中某个文件无法修改&#xff0c;不能输入_keil5 h文件无法修改-CSDN博客 2.编译报错declaration may not appear after executable statement in block STM32常见错误error: #268: declaration may not appear after executabl…...

C语言复习笔记--自定义类型

今天我们来复习一下自定义类型.自定义类型大概分为结构体,枚举,联合体,数组这几种.数组在之前就介绍过.今天我们来看下其他三种. 结构体 首先来看结构体. 结构体类型的声明 之前在操作符的地方简单认识过结构体.下面我们回顾一下. 结构体回顾 结构是⼀些值的集合&#xff0c;这…...

做 iOS 调试时,我尝试了 5 款抓包工具

日常做开发的人&#xff0c;特别是和客户端接口打交道的同学&#xff0c;应该对“抓包”这件事不陌生。 调试登录流程、分析接口格式、排查错误返回、分析网络性能、甚至研究第三方 App 的数据通信……说到底&#xff0c;都绕不开“抓 HTTPS 包”这一步。 而这一步&#xff0…...

html css js网页制作成品——HTML+CSS珠海网页设计网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

FID和IS的区别

&#x1f4ca; 生成模型评估&#xff1a;你选 IS 还是 FID&#xff1f; 在评估 GAN、Diffusion 等图像生成模型时&#xff0c;两个最常被提到的指标是&#xff1a; &#x1f539;IS (Inception Score) &#x1f539;FID (Frchet Inception Distance) &#x1f9e0; Inception…...

前端三大件--HTML

引言 在互联网的世界里&#xff0c;每一个绚丽多彩的网页背后&#xff0c;都离不开 HTML 的支撑。HTML&#xff08;Hyper Text Markup Language&#xff0c;超文本标记语言&#xff09;作为网页开发的基础语言&#xff0c;就像是搭建高楼大厦的砖块&#xff0c;是所有 Web 开发…...

Node.js 的 child_process 模块详解

Node.js 的 child_process 模块提供了创建子进程的能力,使 Node.js 应用能够执行系统命令、运行其他程序或脚本。这个模块非常强大,可以帮助我们实现很多复杂的功能。 1. exec - 执行 shell 命令 exec 方法用于执行 shell 命令,并缓冲任何产生的输出。 特点 创建 shell 来…...

日常知识点之随手问题整理(虚函数 虚函数表 继承的使用场景)

新来的同事提到一个虚函数解耦头文件的问题&#xff0c;就想起来对虚函数进行一些回顾。 他的问题是&#xff0c;通过纯虚函数&#xff0c;如何实现不包含头文件即可真正调用到子类的实际接口。 》这里肯定是不合理的&#xff0c;需要一个中间管理类&#xff0c;对纯虚函数和相…...

【软件设计师:数据结构】2.数据结构基础(二)

一、树 树是n(n≥0)个结点的有限集合,n=0时称为空树,在任一非空树中 ● 有且仅有一个称为根的结点。 ● 其余的结点可分为m(m≥0)个互不相交的子集T1,T2…,Tm,其中每个子集本身又是一棵树,并称其为根结点的子树。 1、树的基本概念 ● 双亲和孩子 ● 兄弟:具有相同双…...

Python训练营打卡——DAY18(2025.5.7)

目录 一、基于聚类进一步推断类型 1. 聚类分析 2. 簇的总结与定义 二、作业 1. 聚类分析 2. 簇的总结与定义 3. 模型效果提升 一、基于聚类进一步推断类型 选用昨天kmeans得到的效果进行聚类&#xff0c;进而推断出每个簇的实际含义。 1. 聚类分析 # 先运行之前预处理…...

初学Python爬虫

文章目录 前言一、 爬虫的初识1.1 什么是爬虫1.2 爬虫的核心1.3 爬虫的用途1.4 爬虫分类1.5 爬虫带来的风险1.6. 反爬手段1.7 爬虫网络请求1.8 爬虫基本流程 二、urllib库初识2.1 http和https协议2.2 编码解码的使用2.3 urllib的基本使用2.4 一个类型六个方法2.5 下载网页数据2…...

【CSS】Grid 的 auto-fill 和 auto-fit 内容自适应

CSS Grid 的 auto-fill 和 auto-fit /* 父元素 */ .grid {display: grid;/* 定义「网格容器」里有多少列&#xff0c;以及每列的宽度 *//* repeat 是个「重复函数」&#xff0c;表示后面的模式会被重复多次 *//* auto-fit 是一个特殊值&#xff0c;自动根据容器宽度&#xff…...

绕线机的制作与研究

绕线机的制作与研究 摘要 本文详细阐述了绕线机的制作过程,涵盖从设计规划到实际制作的各个环节。通过对绕线机工作原理的深入分析,确定了关键技术参数,并依此完成机械结构与控制系统的设计。在制作阶段,运用多种加工工艺完成零件制造与设备组装。经测试,自制绕线机性能…...

引用的使用

引用的语法 作用&#xff1a;起别名 引用的本质是指针常量 数据类型 &别名原名&#xff1b; 引用必须要初始化 引用一旦初始化&#xff0c;不能修改 不能返回局部变量的引用 引用做形参 #include<iostream> #include<string> using namespace std; //通过引用…...

css animation 动画属性

animation // 要绑定的关键帧规则名称 animation-name: slidein;// 定义动画完成一个周期所需的时间&#xff0c;秒或毫秒 animation-duration: 3s;// 定义动画速度曲线 animation-timing-function: ease;// 定义动画开始前的延迟时间 animation-delay: 1s;// 定义动画播放次数…...

Nacos源码—Nacos集群高可用分析(二)

4.集群节点的健康状态变动时的数据同步 (1)Nacos后台管理的集群管理模块介绍 在集群管理模块下&#xff0c;可以看到每个节点的状态和元数据。节点IP就是节点的IP地址以及端口&#xff0c;节点状态就是标识当前节点是否可用&#xff0c;节点元数据就是相关的Raft信息。 其中节点…...

SRAM详解

一、SRAM基础原理 定义与结构 SRAM&#xff08;Static Random-Access Memory&#xff0c;静态随机存取存储器&#xff09;是一种基于触发器&#xff08;Flip-Flop&#xff09;结构的易失性内存&#xff0c;通过交叉耦合的反相器&#xff08;6晶体管&#xff0c;6T单元&#xff…...

JavaWeb:MySQL进阶

多表设计 一对多&#xff08;多对一&#xff09; 外键 一对一 多对多 多表查询 内连接 外连接 子查询 -- 查询员工表 select * from emp;-- 查询部门表 select * from dept;-- 查询员工和部门 select * from emp, dept; -- 笛卡尔积select * from emp, dept where emp.dept_i…...

Golang 接口 vs Rust Trait:一场关于抽象的哲学对话

一、引言 在现代编程语言中&#xff0c;接口&#xff08;Interface&#xff09; 和 Trait 是实现多态和抽象行为的关键机制。它们允许我们定义行为契约&#xff0c;让不同的类型共享相同的语义接口&#xff0c;从而提升代码的复用性和扩展性。 Go 和 Rust 分别代表了两种截然…...

智算中心的搭建标准

智算中心的搭建标准主要涉及以下几个方面&#xff1a; 开放标准&#xff1a; 硬件与软件开放&#xff1a;从硬件到软件、从芯片到架构&#xff0c;都应采用开放、标准的技术。例如&#xff0c;硬件支持如 OCP、ODCC、Open19 等开放社区标准&#xff0c;软件采用如 OpenStack、K…...

商汤科技前端面试题及参考答案

有没有配置过 webpack,讲一下 webpack 热更新原理,能否自己实现一些插件? Webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具。在实际项目中,经常会对其进行配置,以满足项目的各种需求,比如处理不同类型的文件、优化代码、配置开发服务器等。 Webpack 热更…...

windows下docker的使用

找了个docker教程 Windows Docker 安装 | 菜鸟教程Windows Docker 安装 Docker 并非是一个通用的容器工具&#xff0c;它依赖于已存在并运行的 Linux 内核环境。Docker 实质上是在已经运行的 Linux 下制造了一个隔离的文件环境&#xff0c;因此它执行的效率几乎等同于所部署的…...

AI日报 · 2025年5月07日|谷歌发布 Gemini 2.5 Pro 预览版 (I/O 版本),大幅提升编码与视频理解能力

1、谷歌发布 Gemini 2.5 Pro 预览版 (I/O 版本)&#xff0c;大幅提升编码与视频理解能力 谷歌于5月6日提前发布 Gemini 2.5 Pro 预览版 (I/O 版本)&#xff0c;为开发者带来更强编码能力&#xff0c;尤其优化了前端与UI开发、代码转换及智能体工作流构建&#xff0c;并在WebDe…...

Redis 8.0 正式版发布,新特性很强!

就在前两天&#xff0c;Redis 8.0 正式版 (GA) 来了&#xff01;这并不是一次简单的更新&#xff0c;Redis 8.0 不仅带来了性能上的进一步提升&#xff0c;还带来一些实用的新特性与功能增强。并且&#xff0c;最重要的是拥抱 AGPLv3 重归开源&#xff01; 下面&#xff0c;简单…...

MySQL核心机制:日志系统、锁机制与事务管理的深度剖析

一.介绍 MySQL作为世界上最流行的开源关系型数据库之一&#xff0c;其强大的事务处理能力和高并发支持使其在各种复杂应用场景中得到广泛应用。MySQL的核心机制包括日志系统、锁机制和事务管理&#xff0c;这些机制共同确保了数据库的ACID特性&#xff0c;为应用程序提供了可靠…...

Mybatis标签使用 -association 绑定对象,collection 绑定集合

注意 association标签中的 select , column 属性使用 collection 标签中的 ofType 属性使用 Data public class Tours implements Serializable {private static final long serialVersionUID 1L;private Integer touId;private String tourName;private Integer guideId;pri…...

IBM BAW(原BPM升级版)使用教程Toolkit介绍

本部分为“IBM BAW&#xff08;原BPM升级版&#xff09;使用教程系列”内容的补充。 一、系统Toolkit 在 IBM Business Automation Workflow (BAW) 中&#xff0c;System Toolkit 是一组预先定义和配置好的工具、功能和组件&#xff0c;旨在帮助流程设计者和开发人员快速构建…...

排列组合算法:解锁数据世界的魔法钥匙

在 C 算法的奇幻世界里&#xff0c;排列和组合算法就像是两把神奇的魔法钥匙&#xff0c;能够帮我们解锁数据世界中各种复杂问题的大门。今天&#xff0c;作为 C 算法小白的我&#xff0c;就带大家一起走进排列和组合算法的奇妙天地。 排列算法&#xff1a;创造所有可能的顺序…...

LVGL -meter的应用

1 meter介绍 lv_meter 是 LVGL v8 引入的一种图形控件&#xff0c;用于创建仪表盘样式的用户界面元素&#xff0c;它可以模拟像速度表、电压表、温度表这类模拟表盘。它通过可视化刻度、指针、颜色弧线等来展示数值信息&#xff0c;是一种非常直观的数据展示控件。 1.1 核心特…...

MCP学习

一、MCP基础理论与核心概念 1.1 协议定义与设计目标 MCP&#xff08;Model Context Protocol&#xff09;是Anthropic公司于2024年11月开源的标准化协议&#xff0c;旨在解决大型语言模型&#xff08;LLM&#xff09;与外部工具、数据源之间的动态交互问题。其核心目标包括&…...

软件工程(三):模块的内聚模型

模块内聚的7种类型&#xff08;从低到高&#xff09; 等级类型描述示例1️⃣ 最低偶然性内聚&#xff08;Coincidental Cohesion&#xff09;模块内部的各功能毫无关系&#xff0c;随机拼凑一个模块中既有文件读写&#xff0c;又有图像压缩、还处理用户登录2️⃣逻辑性内聚&am…...

Java中字符转数字的原理解析 - 为什么char x - ‘0‘能得到对应数字

前言 在Java编程中&#xff0c;我们经常需要将字符形式的数字转换为实际的数值。有很多方法可以实现这一转换&#xff0c;比如使用Integer.parseInt()或Character.getNumericValue()等方法。但有一种简便且高效的方式是直接使用char - 0运算&#xff0c;本文将详细解析这种方法…...

View的事件分发机制

&#xff08;一&#xff09;为什么要有事件分发机制 安卓界面上面的View的层级结构是树形的&#xff0c;可能出现多个View重叠在一起的现象&#xff08;如下图&#xff09;&#xff0c;当我们点击的地方为多个View重叠的区域时&#xff0c;这个点击事件应该给谁呢&#xff1f;为…...

【C++】类和对象【下】

目录 一、再探构造函数1、测试题 二、类型转换三、static成员1. 静态成员变量2. 静态成员函数 四、友元五、内部类六、匿名对象七、对象拷贝时的编译器优化 个人主页<—请点击 C专栏<—请点击 一、再探构造函数 之前我们实现构造函数时&#xff0c;初始化成员变量主要使…...

【JS逆向基础】并发爬虫

前言&#xff1a;所谓并发编程是指在一台处理器上“同时”处理多个任务。并发是在同一实体上的多个事件。强调多个事件在同一时间间隔发生。 1&#xff0c;进程、线程以及协程 【1】进程概念 我们都知道计算机的核心是CPU&#xff0c;它承担了所有的计算任务;而操作系统是计算…...

Android组件化 -> 基础组件进行Application,Activity生命周期分发

在lib_common基础组件模块创建上下文持有类&#xff0c;生命周期派发类 object AppContextProvider {private lateinit var application: Applicationprivate var currentActivityRef: WeakReference<Activity>? null// 应用生命周期监听器列表private val appLifecyc…...

42. PCB防静电环设计

PCB防静电环的作用 1. PCB防静电环的作用2. 防静电环设计技术点 1. PCB防静电环的作用 防静电环主要用于生产、运输、售后等环节人体会直接接触电路板的场景。 防静电环只在顶层和底层设计即可。 2. 防静电环设计技术点...

深入理解Java反射机制

java反射是java语言中一个强大而灵活的特性&#xff0c;它允许程序在运行时检查和操作类、接口、字段和方法。 为了方便理解下文&#xff0c;我先给出Cat对象 public class Cat implements jump,Run {private int age;public String name;protected String color;double he…...

嵌入式音视频通话EasyRTC基于WebRTC技术驱动智能带屏音箱:开启智能交互新体验

一、引言​ 随着智能家居市场的蓬勃发展&#xff0c;智能带屏音箱作为家庭智能交互中心的重要组成部分&#xff0c;其功能需求日益丰富。EasyRTC凭借其低延迟、高稳定性的特点&#xff0c;为智能带屏音箱带来了全新的交互体验&#xff0c;能满足用户在视频通话、远程监控、在线…...

1987-2023年各省进出口总额数据整理(含进口和出口)(无缺失)

1987-2023年各省进出口总额数据整理&#xff08;含进口和出口&#xff09;&#xff08;无缺失&#xff09; 1、时间&#xff1a;1987-2023年 2、来源&#xff1a;各省年鉴、统计公报 3、指标&#xff1a;进出口总额&#xff08;万美元&#xff09;、进口总额&#xff08;万美…...

paddle ocr 或 rapid ocr umi ocr 只识别了图片的下部分内容 解决方案

如上图,识别的准确率其实很高,但是只识别了下半部分的内容,上半部分的内容就没有识别到,其实是程序设置有点问题,程序设置的解决方案如下: 如上图,识别的准确率其实很高,但是只识别了下半部分的内容,上半部分的内容就没有识别到,其实是程序设置有点问题,程序设置的…...