Hugging Face 的 Trainer类用法
一、使用方法
Hugging Face 的 Trainer
类是一个高级API,用于简化训练、评估和预测的流程。以下是如何使用 Trainer
类的基本步骤:
1. 导入必要的类和函数
首先,您需要导入 Trainer
类以及其他可能需要的类或函数。
from transformers import Trainer, TrainingArguments
2. 准备数据集
您需要准备一个训练数据集和一个验证数据集。数据集可以是 Dataset
类的实例,通常使用 load_dataset
函数来加载。
from datasets import load_dataset
raw_datasets = load_dataset("your_dataset_name")
train_dataset = raw_datasets["train"]
eval_dataset = raw_datasets["test"]
3. 初始化模型和分词器
根据您的任务选择一个预训练模型和相应的分词器。
from transformers import AutoTokenizer, AutoModelForSequenceClassification
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=num_labels)
4. 准备训练参数
定义训练参数,如学习率、训练批次大小、评估频率等。
training_args = TrainingArguments(output_dir="./results",num_train_epochs=3,per_device_train_batch_size=16,per_device_eval_batch_size=64,warmup_steps=500,weight_decay=0.01,logging_dir="./logs",logging_steps=10,
)
5. 创建 Trainer
实例
使用上述准备好的参数创建 Trainer
实例。
trainer = Trainer(model=model,args=training_args,train_dataset=train_dataset,eval_dataset=eval_dataset,tokenizer=tokenizer,compute_metrics=compute_metrics, # 这是一个自定义函数,用于计算评估指标
)
6. 训练模型
调用 train
方法开始训练模型。
trainer.train()
7. 评估模型
在训练期间或之后,可以使用 evaluate
方法来评估模型。
eval_result = trainer.evaluate()
8. 预测
使用 predict
方法进行预测。
predictions = trainer.predict(test_dataset)
9. 保存和加载模型
保存和加载模型以便后续使用。
trainer.save_model("./save_directory")
model = AutoModelForSequenceClassification.from_pretrained("./save_directory")
注意事项
Trainer
类提供了许多参数和回调函数,可以根据需要进行自定义。compute_metrics
函数必须返回一个字典,其中包含评估指标。- 数据集需要是
Dataset
类的实例,并且数据集中的数据需要是模型可以理解的格式。 Trainer
类也支持多GPU和TPU训练。
使用Trainer
类可以极大地简化训练流程,特别是对于常见的NLP任务,如文本分类、命名实体识别等。
二、使用了Transformers提供的Trainer类,不能说他使用了Transformers模型是吗?
是的,使用 Trainer
类并不一定意味着使用了 Transformers
提供的预训练模型。
Trainer
是 Hugging FaceTransformers
框架中的通用训练工具,它确实是为Transformers
的预训练模型设计的,但理论上,它也可以用于非Transformers
的模型,只要这些模型的输入和输出格式符合Trainer
的要求。- 例如,如果你自己定义了一个 PyTorch 模型,且其输入格式类似于
Transformers
模型(例如,包含input_ids
,attention_mask
,labels
等),你也可以使用Trainer
来训练这个模型。
但在代码1中,明确使用了 AutoModelForSequenceClassification.from_pretrained("roberta-base")
,所以可以肯定代码1中使用了 Hugging Face 提供的 Transformers
预训练模型。
三、非Transformers
的预训练模型也可以使用Trainer类吗?
是的,Trainer
类可以用于训练非 Transformers
的模型,只要满足以下条件:
- 模型格式:模型是一个标准的 PyTorch
nn.Module
,并且支持前向传播返回损失值或 logits。 - 数据格式:数据集包含
input_ids
,attention_mask
, 和labels
(或者可以自定义数据格式)。 - 自定义训练逻辑(如果需要):通过修改
Trainer
的默认行为,可以为任意模型定义特定的训练逻辑。
例子:使用 Trainer
训练一个自定义模型
你可以这样使用 Trainer
训练一个普通的 PyTorch 模型:
from torch import nn
from transformers import Trainer, TrainingArguments# 自定义 PyTorch 模型
class CustomModel(nn.Module):def __init__(self, input_dim, num_labels):super().__init__()self.fc = nn.Linear(input_dim, num_labels)def forward(self, input_ids=None, labels=None):logits = self.fc(input_ids)loss = Noneif labels is not None:loss_fn = nn.CrossEntropyLoss()loss = loss_fn(logits, labels)return {"loss": loss, "logits": logits}# 创建自定义模型
model = CustomModel(input_dim=768, num_labels=2)# 定义数据集 (确保与 Trainer 的输入兼容)
from datasets import Dataset
import numpy as npdata = {"input_ids": np.random.rand(100, 768).astype(np.float32), "labels": np.random.randint(0, 2, 100)}
dataset = Dataset.from_dict(data)# 设置训练参数
training_args = TrainingArguments(output_dir="./results",num_train_epochs=3,per_device_train_batch_size=8,evaluation_strategy="epoch",
)# 创建 Trainer 实例
trainer = Trainer(model=model,args=training_args,train_dataset=dataset,eval_dataset=dataset,
)# 开始训练
trainer.train()
总结:
Trainer
不局限于Transformers
的预训练模型,可以用于任何符合要求的 PyTorch 模型。- 如果你在代码中明确使用了
Transformers
的模型加载器(如AutoModel*
),那就可以说是使用了Transformers
的预训练模型。
四、Trainer类封装这个用法可以自动进行分布式训练吗?我的设备有2块GPU,这个训练过程竟然把2块GPU都使用了?
是的,Trainer
类可以自动支持分布式训练,并且它会根据设备环境(如多GPU)自动启用适合的分布式训练模式。这也是Trainer
类强大的一个特点。
为什么Trainer
会使用两块GPU?
Trainer
基于Hugging Face的transformers
库,它底层依赖PyTorch
,并且与torch.distributed
深度集成。- 如果检测到有多个GPU可用,它会自动启用DataParallel或DistributedDataParallel模式(视具体配置而定),以充分利用所有的可用GPU资源进行训练。
分布式训练的具体机制:
-
默认行为:
- 当调用
Trainer
时,系统会自动检查设备环境(通过torch.cuda.device_count()
等方法)。 - 如果有多个GPU,
Trainer
会自动启用DataParallel或DistributedDataParallel进行训练。
- 当调用
-
分布式通信后端:
Trainer
使用torch.distributed
的通信后端(如NCCL
)来协调多个GPU之间的参数同步。- 每个GPU处理一部分数据(称为“mini-batch”),然后在每次迭代后通过通信后端同步参数。
-
训练参数控制:
- 通过
TrainingArguments
中的参数,可以显式控制分布式训练的行为。device
:Trainer
会自动分配到cuda
设备。per_device_train_batch_size
:指定单个GPU的batch size,多个GPU时会自动按设备数扩展。distributed
:内部自动检测,不需要用户手动设置。
- 通过
如何确认Trainer
是否使用了两块GPU?
-
查看日志输出:
- 如果
Trainer
检测到多个GPU,会在训练日志中显示类似信息:Using distributed mode with NCCL backend
- 还可以看到每个设备的负载情况和训练进度。
- 如果
-
监控GPU资源:
- 使用
nvidia-smi
命令查看GPU的利用情况。如果两块GPU的显存和计算资源都有明显使用,说明分布式训练正在运行。
- 使用
如何手动控制分布式训练行为?
如果需要更明确地控制分布式训练,可以通过调整TrainingArguments
参数实现:
示例:
training_args = TrainingArguments(output_dir="./results",evaluation_strategy="epoch",save_strategy="epoch",learning_rate=2e-5,per_device_train_batch_size=16, # 单GPU的batch sizeper_device_eval_batch_size=16,num_train_epochs=1,weight_decay=0.01,logging_dir="./logs",logging_steps=10,save_total_limit=2,load_best_model_at_end=True,metric_for_best_model="accuracy",greater_is_better=True,report_to="none",fp16=True, # 启用混合精度训练(更快)dataloader_num_workers=4, # 加速数据加载local_rank=-1, # -1表示不强制指定GPU分布,自动分配
)
强制使用单GPU:
如果只想使用一块GPU,可以设置CUDA_VISIBLE_DEVICES
环境变量:
export CUDA_VISIBLE_DEVICES=0
然后运行代码,Trainer
就只会使用GPU 0。
总结:
Trainer
默认支持多GPU分布式训练,自动检测和利用设备资源。- 可以通过
TrainingArguments
进一步优化训练过程或限制设备使用。 - 如果观察到两块GPU均有负载,说明分布式训练已经正常工作。你可以利用这种特性来加速训练过程。
相关文章:
Hugging Face 的 Trainer类用法
一、使用方法 Hugging Face 的 Trainer 类是一个高级API,用于简化训练、评估和预测的流程。以下是如何使用 Trainer 类的基本步骤: 1. 导入必要的类和函数 首先,您需要导入 Trainer 类以及其他可能需要的类或函数。 from transformers im…...
RabbitMQ前置概念
文章目录 1.AMQP协议是什么?2.rabbitmq端口介绍3.消息队列的作用和使用场景4.rabbitmq工作原理5.整体架构核心概念6.使用7.消费者消息推送限制(work模型)8.fanout交换机9.Direct交换机10.Topic交换机(推荐)11.声明队列…...
IDEA2023版中TODO的使用
介绍:TODO其实本质上还是注释,只不过加上了TODO这几个字符,可以让使用者快速找到。 注意:在类、接口等文件中,注释是使用// 即:// TODO 注释内容 在配置文件中,注释是使用# 即:# TO…...
(STM32笔记)十二、DMA的基础知识与用法 第二部分
我用的是正点的STM32F103来进行学习,板子和教程是野火的指南者。 之后的这个系列笔记开头未标明的话,用的也是这个板子和教程。 DMA的基础知识与用法 二、DMA传输设置1、数据来源与数据去向外设到存储器存储器到外设存储器到存储器 2、每次传输大小3、传…...
windows系统“GameInputRedist.dll”文件丢失或错误导致游戏运行异常如何解决?windows系统DLL文件修复方法
GameInputRedist.dll是存放在windows系统中的一个重要dll文件,缺少它可能会造成部分游戏不能正常运行。当你的电脑弹出提示“无法找到GameInputRedist.dll”或“计算机缺少GameInputRedist.dll”等错误问题,请不用担心,我们将深入解析DLL文件…...
使用分割 Mask 和 K-means 聚类获取天空的颜色
引言 在计算机视觉领域,获取天空的颜色是一个常见任务,广泛应用于天气分析、环境感知和图像增强等场景。本篇博客将介绍如何通过已知的天空区域 Mask 提取天空像素,并使用 K-means 聚类分析天空颜色,最终根据颜色占比查表得到主导…...
UML系列之Rational Rose笔记四:时序图(顺序图_序列图)
时序图有很多画法,这基本上能算rose里面要求最乱的一种图了;有些人的需求是BCE模式,这是正常规范点的,有些人就不需要,有些需要用数据库交互,有些不需要;没有一个较为统一的需求;在此…...
nginx反向代理http 和 https(案例)
说明:在香港开了一台虚拟机,主要用于将来自国外访问的80和443代理到大陆IDC机房 (1) 定义80和443的upstream 211.155.82.174 是keepalive中VIP对应的公网IP(在国内访问www.playyx.com解析到211.155.82.174) upstream new_server…...
Dify应用-工作流
目录 DIFY 工作流参考 DIFY 工作流 2025-1-15 老规矩感谢参考文章的作者,避免走弯路。 2025-1-15 方便容易上手 在dify的一个桌面上,添加多个节点来完成一个任务。 每个工作流必须有一个开始和结束节点。 节点之间用线连接即可。 每个节点可以有输入和输出 输出类型有,字符串,…...
装备制造业:建立项目“四算”管理:以合同为源头,以项目为手段实现合同的测算、预算、核算与决算的管控体系
尊敬的各位管理层: 大家好!作为装备制造业的 CFO,我今天要向大家汇报的是如何建立项目“四算”管理,即以合同为源头,以项目为手段实现合同的测算、预算、核算与决算的管控体系。在当前市场竞争激烈、成本压力不断增大…...
Centos7将/dev/mapper/centos-home磁盘空间转移到/dev/mapper/centos-root
1、查看存储 df -h文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 126G 0 126G 0% /dev tmpfs 126G 0 126G 0% /dev/shm tmpfs 126G 19M 126G 1% /run tmpfs …...
docker 部署 MantisBT
1. docker 安装MantisBT docker pull vimagick/mantisbt:latest 2.先运行实例,复制配置文件 docker run -p 8084:80 --name mantisbt -d vimagick/mantisbt:latest 3. 复制所需要配置文件到本地路径 docker cp mantisbt:/var/www/html/config/config_inc.php.…...
【Vue - Element 】实现表单输入框的远程搜索功能
需求 表单是一个常见的元素,而在表单中,常常需要用户从大量的数据中选择一个或多个选项。 为了提高用户体验,提供远程搜索功能可以帮助用户快速找到所需的选项,而不是从冗长的下拉列表中手动查找。 以该需求为例,我…...
学习华为熵减:激发组织活力(系列之三)
目录 为什么学习华为? 学习华为什么? 一、势:顺势而为,在风口上猪都会飞起来。 二、道:就是认识和利用规律层面,文化和制度创新就是企业经营之道。 三、法:就是一套价值管理的变革方法论。…...
多种vue前端框架介绍
学如逆水行舟,不进则退。 在现今的软件开发领域,Vue.js凭借其高效、灵活和易于上手的特性,成为了前端开发的热门选择。对于需要快速搭建企业级后台管理系统的开发者而言,使用现成的Vue后台管理系统模板无疑是一个明智之举。 本文…...
C语言重点回顾(持续更新中~)
个人见解,有异议可以留言~ 第一讲:初识C语言 目录 1.编译和链接 2.main函数 3.库函数 4.关键字 5.字符和字符串 6.转义字符 1.编译和链接 初始的C语言源代码是一个文本文件,要想将一个文本文件变成一个执行文件,需要经过编…...
Navicat Premium 原生支持阿里云 PolarDB 数据库
近日,我司旗下的 Navicat Premium 软件通过了阿里云 PolarDB 数据库产品生态集成认证,这标志着 Navicat 通过原生技术全面实现了对秒级弹性、高性价比、稳定可靠的PolarDB 数据库三大引擎(PolarDB MySQL版、PolarDB PostgreSQL版和 PolarDB f…...
青少年编程与数学 02-006 前端开发框架VUE 25课题、UI数据
青少年编程与数学 02-006 前端开发框架VUE 25课题、UI数据 一、UI数据二、Element Plus处理响应式数据三、Vuetify处理响应式数据 课题摘要:本文探讨了UI数据在用户界面中的重要性和处理方法。UI数据包括展示数据、用户输入、状态数据等,对用户体验和应用交互性有直…...
用css和html制作太极图
目录 css相关参数介绍 边距 边框 伪元素选择器 太极图案例实现、 代码 效果 css相关参数介绍 边距 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>*{margin: 0;padding: 0;}div{width: …...
软件测试入门—功能需求分析:以一个旅游管理系统为例
在软件测试的旅程中,功能需求分析是测试人员构建高质量测试用例的基础,它确保软件的各项功能都能按照预期正常运行。接下来,我们将以一个旅游管理系统为例,详细阐述如何进行功能需求分析,帮助大家更清晰地掌握这一重要…...
深度解析Linux中关于操作系统的知识点
操作系统概述与核心概念 任何计算机系统都包含一个基本的程序集合,成为操作系统OS 操作系统是一款进行软硬件管理的软件 操作系统包括: 内核(进程管理,内存管理,驱动管理) 其他程序(例如数据…...
【深度学习】关键技术-激活函数(Activation Functions)
激活函数(Activation Functions) 激活函数是神经网络的重要组成部分,它的作用是将神经元的输入信号映射到输出信号,同时引入非线性特性,使神经网络能够处理复杂问题。以下是常见激活函数的种类、公式、图形特点及其应…...
分布式ID的实现方案
1. 什么是分布式ID 对于低访问量的系统来说,无需对数据库进行分库分表,单库单表完全可以应对,但是随着系统访问量的上升,单表单库的访问压力逐渐增大,这时候就需要采用分库分表的方案,来缓解压力。 …...
电脑有两张网卡,如何实现同时访问外网和内网?
要是想让一台电脑用两张网卡,既能访问外网又能访问内网,那可以通过设置网络路由还有网卡的 IP 地址来达成。 检查一下网卡的连接 得保证电脑的两张网卡分别连到外网和内网的网络设备上,像路由器或者交换机啥的。 给网卡配上不一样的 IP 地…...
Linux 查看内存命令
目录 1. free 2. vmstat 3. top 4. htop 5. /proc/meminfo 1. free free命令是最常用的查看内存使用情况的命令。它显示系统的总内存、已使用内存、空闲内存和交换内存的总量。 free -h -h 选项:以易读的格式(如GB、MB)显示内存大小。…...
无法联网怎么在docker中安装Ribbitmq
如果无法连接互联网,无法在Docker中安装RabbitMQ。但是,您可以使用本地镜像或者手动下载RabbitMQ的Docker镜像并进行安装。 以下是使用本地镜像的步骤: 从可以上网的计算机上拉取RabbitMQ的官方Docker镜像: docker pull rabbitmq:…...
Spring Boot 定时任务搭建及Quartz对比详解
前言: 之前在帮别人搭建定时任务时 被问到为什么不用 Quartz 反而使用 SpringBoot 定时任务 以下是 SpringBoot 定时任务 的使用情况 大家可参考具体情况选择使用 1. 概述: Spring Boot 定时器是基于 Spring Framework 的 Task Scheduling 模块实现的…...
集中式架构vs分布式架构
一、集中式架构 如何准确理解集中式架构 1. 集中式架构的定义 集中式架构是一种将系统的所有计算、存储、数据处理和控制逻辑集中在一个或少数几个节点上运行的架构模式。这些中央节点(服务器或主机)作为系统的核心,负责处理所有用户请求和…...
中国数字安全产业年度报告(2024)
数字安全是指,在全球数字化背景下,合理控制个人、组织、国家在各种活动中面临的数字风险,保障数字社会可持续发展的政策法规、管理措施、技术方法等安全手段的总和。 数字安全领域可从三个方面对应新质生产力的三大内涵:一是基于大型语言模型…...
Python Wi-Fi密码测试工具
Python Wi-Fi测试工具 相关资源文件已经打包成EXE文件,可双击直接运行程序,且文章末尾已附上相关源码,以供大家学习交流,博主主页还有更多Python相关程序案例,秉着开源精神的想法,望大家喜欢,点…...
深入探讨DICOM医学影像中的MPPS服务及其具体实现
深入探讨DICOM医学影像中的MPPS服务及其具体实现 1. 引言 在医疗影像的管理和传输过程中,DICOM(数字影像和通信医学)标准发挥着至关重要的作用。除了DICOM影像的存储和传输(如影像存储SCP和影像传输SCP),…...
【Rust自学】12.3. 重构 Pt.1:改善模块化
12.3.0. 写在正文之前 第12章要做一个实例的项目——一个命令行程序。这个程序是一个grep(Global Regular Expression Print),是一个全局正则搜索和输出的工具。它的功能是在指定的文件中搜索出指定的文字。 这个项目分为这么几步: 接收命令行参数读取…...
Cosmos:英伟达发布世界基础模型,为机器人及自动驾驶开发加速!
1. 简介 在2025年消费电子展(CES)上,NVIDIA发布了全新的Cosmos平台,旨在加速物理人工智能(AI)系统的开发,尤其是自主驾驶车辆和机器人。该平台集成了生成式世界基础模型(WFM&#x…...
【Docker】保姆级 docker 容器部署 MySQL 及 Navicat 远程连接
🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. docker 容器部署 MySQL1.1 拉取mysql镜像1.2 启动容器1.3 进入容器1.4 使用 root 用户登录 2. Navicat 连…...
Java IDEA中Gutter Icons图标的含义
前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。 👉点击跳转到教程 前言: 很多人刚开始用IDEA来学习编程,会发现下面这些图标。 但是…...
Broker收到消息之后如何存储
1.前言 此文章是在儒猿课程中的学习笔记,感兴趣的想看原来的课程可以去咨询儒猿课堂《从0开始带你成为RocketMQ高手》,我本人觉得这个作者还是不错,都是从场景来进行分析,感觉还是挺适合我这种小白的。这块主要都是我自己的学习笔…...
RuoYi框架上传图片或文件到阿里云OSS详细教程
为了提供一个更加详细的教程,我们将深入探讨每个步骤,并添加一些额外的细节和最佳实践建议。以下是关于如何在Ruoyi框架中集成阿里云OSS实现文件上传功能的详尽指南。 详细教程 环境准备 注册阿里云账号:访问阿里云官网并创建一个账户。创…...
【论文笔记】SmileSplat:稀疏视角+pose-free+泛化
还是一篇基于dust3r的稀疏视角重建工作,作者联合优化了相机内外参与GS模型,实验结果表明优于noposplat。 abstract 在本文中,提出了一种新颖的可泛化高斯方法 SmileSplat,可以对无约束(未标定相机的)稀疏多…...
python实现收到一封邮件时自动触发执行读取邮件内容及后续操作
要实现收到一封邮件时自动触发执行 getEmailData(),可以结合定时任务或实时事件监控机制来实现。以下是两种常用的方法: 方法 1:轮询方式(定时检测) 使用 schedule 或 time.sleep 循环定期检测收件箱: i…...
【Vim Masterclass 笔记12】S06L26 + L27:Vim 文本的搜索、查找及替换同步练习(含点评课)
文章目录 S06L26 Exercise 07 - Search, Find, and Replace1 训练目标2 操作指令2.1. 打开 search-practice.txt 文件2.2. 同一行内的搜索练习2.3. 当前文件内的搜索练习2.4. 单词搜索练习2.5. 全局替换练习 3 退出 Vim S06L27 同步练习点评课 写在前面 Vim 的文本检索、查找与…...
YOLOv11 OBB 任务介绍与数据集构建要求及训练脚本使用指南
YOLO(You Only Look Once)是一个高效且广泛应用于目标检测任务的深度学习框架。在目标检测任务中,传统的边界框(AABB)通过四个参数来定义目标的位置信息:中心坐标、宽度、高度以及目标的旋转角度。然而&…...
Leecode刷题C语言之超过阈值的最小操作数②
执行结果:通过 执行用时和内存消耗如下: // 最小堆的节点结构体 typedef struct {long long* heap;int size;int capacity; } MinHeap;// 初始化最小堆 MinHeap* createMinHeap(int capacity) {MinHeap* minHeap (MinHeap*)malloc(sizeof(MinHeap));minHeap->s…...
【Linux】11.Linux基础开发工具使用(4)
文章目录 3. Linux调试器-gdb使用3.1 背景3.2 下载安装3.3 使用gdb查询3.4 开始使用 3. Linux调试器-gdb使用 3.1 背景 程序的发布方式有两种,debug模式和release模式 Linux gcc/g出来的二进制程序,默认是release模式 要使用gdb调试,必须…...
Cesium中的CustomDataSource 详解
Cesium CustomDataSource 详解 在 Cesium 中,CustomDataSource 是一个强大的类,用于处理自定义的地理数据。它提供了一种方法,可以通过程序方式添加、管理和更新动态的地理实体,而无需依赖外部数据格式(如 GeoJSON 或…...
win32汇编环境,窗口程序中组合框的应用举例
;运行效果 ;win32汇编环境,窗口程序中组合框的应用举例 ;比如在窗口程序中生成组合框,增加子项,删除某项,取得指定项内容等 ;直接抄进RadAsm可编译运行。重点部分加备注。 ;以下是ASM文件 ;>>>>>>>>>>>>…...
Wireshark 使用教程:网络分析从入门到精通
一、引言 在网络技术的广阔领域中,网络协议分析是一项至关重要的技能。Wireshark 作为一款开源且功能强大的网络协议分析工具,被广泛应用于网络故障排查、网络安全检测以及网络协议研究等诸多方面。本文将深入且详细地介绍 Wireshark 的使用方法&#x…...
菜品管理(day03)
公共字段自动填充 问题分析 业务表中的公共字段: 而针对于这些字段,我们的赋值方式为: 在新增数据时, 将createTime、updateTime 设置为当前时间, createUser、updateUser设置为当前登录用户ID。 在更新数据时, 将updateTime 设置为当前时间…...
Scira - 一个极简的开源 AI 搜索引擎
支持实时搜索 、学术论文分析 、社交媒体洞察 、YouTube 搜索 、航班追踪 、电影搜索,功能倒是挺多。 但是目前只支持 xAI 的 Grok 还不能换模型,不过用的 Vercel SDK 支持下 DeepSeek 应该很容易 https://index.html.zone/ai/scira...
利用源码安装httpd
方法一: 1,下载源码 [rootopenEuler-1 ~]# wget https://archive.apache.org/dist/httpd/httpd-2.4.46.tar.gz [rootopenEuler-1 ~]# ls anaconda-ks.cfg httpd-2.4.46.tar.gz mysql-8.0.36-linux-glibc2.12-x86_64.tar.xz 2,进行压缩 […...
软件测试 —— Selenium(等待)
软件测试 —— Selenium(等待) 一个例子强制等待使用示例:为什么不推荐使用强制等待?更好的选择 隐式等待 implicitly_wait()隐式等待和强制等待的区别隐式等待(Implicit Wait)强制等…...