LLaMA-Factory DeepSeek-R1 模型 微调基础教程

LLaMA-Factory 模型 微调基础教程

  • LLaMA-Factory
    • LLaMA-Factory 下载
  • Anaconda
    • Anaconda 环境创建
      • 软硬件依赖 详情
      • LLaMA-Factory 依赖安装
      • CUDA 安装
      • 量化 BitsAndBytes 安装
      • 可视化微调启动
  • 数据集准备
    • 所需工具下载
    • 使用教程
    • 所需数据合并
    • 数据集预处理
  • DeepSeek-R1 可视化微调
    • 数据集处理
    • 数据详解
    • LLaMA-Factory 基础设置
    • 模型评估与预测
    • 训练模型对话
    • 训练模型导出

LLaMA-Factory 模型 微调 概述
使用LLaMA-Factory进行模型微调具有多方面的好处。首先,它简化了大模型微调的过程,使得即使是没有深厚技术功底的用户也能轻松进行模型的优化和改进。此外,LLaMA-Factory支持多种训练方法,如全量调参、LoRA等,以及不同的对齐方案,如DPO、PPO等。这为用户提供了灵活性,可以根据具体需求选择合适的微调策略。
LLaMA-Factory还提供了一站式服务,从模型微调到量化处理,再到运行,整个过程一气呵成,无需在不同的工具和流程之间来回切换。此外,它支持多种流行的语言模型,如LLaMA、BLOOM、Mistral、Baichuan等,涵盖了广泛的应用场景。
在模型量化方面,LLaMA-Factory能够有效地压缩模型规模,减少模型运行所需的计算量和存储空间,使得模型能够在性能稍弱的设备上也能流畅运行。这不仅提高了模型的可访问性,也降低了运行成本。
此外,LLaMA-Factory的训练过程中记录的内容比较全面,除了同步输出loss曲线图以外,还自带BLEU等评测指标,这有助于用户更好地监控和评估模型的性能。

LLaMA-Factory

LLaMA-Factory 下载

在这里插入图片描述

GitHub: LLaMA-Factory

1. 进到 LLaMA-Factory 后点击code 下载就行,我这边选择的是下载 zip.

在这里插入图片描述

2. 这里也有中文的资料以及详情,感兴趣的可以看看。

在这里插入图片描述

3. 解压完成之后记录一下解压路径。

在这里插入图片描述

Anaconda

Anaconda 环境创建

软硬件依赖 详情

软硬件依赖

在这里插入图片描述

在这里插入图片描述

1. 创建虚拟环境:官方给出的是 python 至少 3.9 推荐 3.10

请添加图片描述

2. 打开终端。

请添加图片描述

3. 导航到 刚才解压的地址,我的是:E:\Model\LLaMA-Factory-main\LLaMA-Factory-main
   命令:E: (导航到E)
   cd E:\Model\LLaMA-Factory-main\LLaMA-Factory-main (导航到具体文件夹)

请添加图片描述

LLaMA-Factory 依赖安装

1. 依赖下载:pip install -r requirements.txt

请添加图片描述

2. 这个也是安装依赖最好都执行一遍: pip install -e ".[torch,metrics]"

请添加图片描述

CUDA 安装

1. CUDA 安装:conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
记得输入 y 继续安装

请添加图片描述

请添加图片描述

量化 BitsAndBytes 安装

1. 安装 BitsAndBytes
如果要在 Windows 平台上开启量化 LoRA(QLoRA),需要安装预编译的 bitsandbytes 库
支持 CUDA 11.112.2, 请根据您的 CUDA 版本情况选择适合的发布版本。
pip install https://github.com/jllllll/bitsandbytes-windows-webui/releases/download/wheels/bitsandbytes-0.41.2.post2-py3-none-win_amd64.whl

请添加图片描述

可视化微调启动

1. 启动命令:llamafactory-cli webui

在这里插入图片描述

2. 如果出现这个错误就说明:无法访问 localhost,因此需要创建一个可分享的链接,但是又因为分享 Gradio share 为false 
   而无法正确响应,所以我们需要更改一下 interface.py 代码。

在这里插入图片描述

3. 找到 interface.py 存在路径,我的是:LLaMA-Factory-main\src\llamafactory\webui

请添加图片描述

4. 找到 run_web_ui()run_web_demo() 方法,把 “share=gradio_share” 修改成:“share=True”
   如下图所示:

在这里插入图片描述

4. 然后再次运行,就成功了。
   对了有一点需要注意的是,这个时候不要搭梯子不然界面会一直加载不出来。

在这里插入图片描述

数据集准备

所需工具下载

微信风格化工具: 留痕

因为我创建的自己的风格化模型所以就用这个了,其他的也可以
例如:finetune_dataset_maker或者自己写一个,抽时间我自己写一个也行,到时候写出来再分享吧
如果大家想了解更多这边有几个论文呢可以参考一下。

T2D:从文本自动生成虚拟代理之间的对话

个性化对话生成的最新趋势:数据集、方法和评估综述

LLaMA-Factory:100多种语言模型的统一高效微调

1. 回到正题哈,点击下载,然后解压。

请添加图片描述

2. 下载第一个就行

请添加图片描述

使用教程

1. 点击 教程跳转官方使用说明

在这里插入图片描述

2. 点击导出数据,跟着步骤来就行。

在这里插入图片描述

不想看的可以跟着我的来弄:
3. 解压之后,找到 MemoTrace.exe 双击执行就可以。

请添加图片描述

4. 点击我的登陆账号,然后在工具点击解析数据

请添加图片描述

请添加图片描述

5. 我这边选择的是AI 对话txt 和 json,大家按需导出就行。

在这里插入图片描述

6. 因为这边需要的数据就只是文本数据,所以就只勾选了文本。

请添加图片描述

7. 记一下目录哈,我这边是在:D:\软件\留痕\data\聊天记录,找相对路径就行。

请添加图片描述

8. 导出完毕之后就相对路径文件夹会有这三个文件,因为我选择导出txt和json 所以会有三个文件
   如果只是json会有两个文件。

请添加图片描述

所需数据合并

1. 在聊天记录文件夹 建立一个 merge.py 的文件

在这里插入图片描述

2. 把下面的代码复制进去,这个代码的主要作用就是合并所有的聊天记录。
import os
import json

# 设置目标文件夹路径
folder_path = r'D:\软件\留痕\data\聊天记录'

# 获取文件夹及其所有子文件夹中的所有 .json 文件
json_files = []
for root, dirs, files in os.walk(folder_path):
    for file in files:
        if file.endswith('.json'):
            json_files.append(os.path.join(root, file))

# 合并所有 .json 文件
merged_data = []
for file in json_files:
    with open(file, 'r', encoding='utf-8') as f:
        try:
            data = json.load(f)
            merged_data.append(data)
        except json.JSONDecodeError:
            print(f"Error decoding {file}. Skipping.")

# 保存合并后的数据到一个新的 .json 文件
merged_file_path = os.path.join(folder_path, 'merged_data.json')
with open(merged_file_path, 'w', encoding='utf-8') as merged_file:
    json.dump(merged_data, merged_file, indent=4, ensure_ascii=False)

print(f"合并后的文件已保存至: {merged_file_path}")
3. 直接在地址栏前面加上 cmd 回车之后就会打开当前路径的命令提示符。

在这里插入图片描述

4. 键入 python merge.py 执行

在这里插入图片描述

5. 显示这个就表示执行完毕,数据已经合并了。

在这里插入图片描述

6. 内容大概就是这样

在这里插入图片描述

数据集预处理

数据集预处理是机器学习和人工智能中不可或缺的环节,其重要性体现在多个方面。
首先,预处理能够提升数据质量,通过清洗噪声、去除重复和无关信息,以及标准化格式,为模型训练提供纯净
且一致的输入。其次,它有助于优化模型性能,例如通过分词、去除停用词等操作,让模型更容易理解和学习数
据中的关键信息,同时减少过拟合的风险。此外,预处理还能增强数据多样性,通过数据增强技术如文本扩充、
同义词替换等,提升模型的泛化能力。在对话系统中,预处理尤为重要,因为它需要处理多轮对话的上下文一致
性以及用户意图的多样性。通过格式化对话数据和增强对话内容,可以显著提升对话系统的自然性和流畅性。总
之,数据集预处理不仅提高了模型的训练效率,还为模型的最终性能奠定了坚实基础,是实现高质量人工智能应
用的关键步骤。
1. 在聊天记录文件夹 建立一个 Data_Preprocessing.py 的文件

在这里插入图片描述

2. 把下面的代码复制进去,这个代码的主要作用就是数据清洗、脱敏、去重以及规则化成sharegpt格式。
   这个等会解释为什么要用 sharegpt 格式。
import json
import re

# 读取 merged_data.json 文件
with open('merged_data.json', 'r', encoding='utf-8') as file:
    data = json.load(file)

# 转换后的数据格式
converted_data = []

# 数据清洗:去除空消息,清除特殊字符,统一格式
def clean_data(dataset):
    cleaned_data = []
    for example in dataset:
        messages = example['messages']
        cleaned_messages = []
        for message in messages:
            # 去除内容为空的消息
            if not message['content'].strip():
                continue
            # 清除多余的空格、换行符等
            message['content'] = message['content'].replace("\n", " ").strip()
            cleaned_messages.append(message)
        if cleaned_messages:
            cleaned_data.append({'messages': cleaned_messages})
    return cleaned_data

# 脱敏处理:替换敏感信息
def replace_sensitive_info(text):
    # 匹配手机号、邮箱等敏感信息
    text = re.sub(r'\d{3}[-]?\d{4}[-]?\d{4}', '[PHONE_NUMBER]', text)  # 替换手机号
    text = re.sub(r'\S+@\S+', '[EMAIL]', text)  # 替换邮箱
    text = re.sub(r'\d{4}-\d{2}-\d{2}', '[DATE]', text)  # 替换日期
    return text

# 匿名化数据:替换用户角色
def anonymize_data(dataset):
    anonymized_data = []
    for example in dataset:
        messages = example['messages']
        anonymized_messages = []
        for message in messages:
            # 匿名化用户角色
            if message['role'] == 'user':
                message['content'] = message['content'].replace("用户", "用户X")
            # 替换敏感信息
            message['content'] = replace_sensitive_info(message['content'])
            anonymized_messages.append(message)
        anonymized_data.append({'messages': anonymized_messages})
    return anonymized_data

# 处理每一条对话
for item_list in data:
    for item in item_list:
        # 确保每个条目中包含 'messages' 字段
        if 'messages' not in item:
            print("跳过:没有找到 'messages' 字段")
            continue  # 如果没有 'messages' 字段,跳过当前数据项
        
        print(f"正在处理数据项: {item}")  # 打印当前处理的项
        conversation = {"conversations": []}
        
        # 处理消息数据
        for message in item['messages']:
            role = message['role']
            content = message['content']
            
            print(f"处理消息:role={role}, content={content}")  # 打印消息内容
            
            # 清洗和脱敏处理
            content = replace_sensitive_info(content)
            
            # 映射 role 到 from 字段
            if role == "system":
                continue  # 忽略 system 消息
            elif role == "user":
                from_role = "human"
            elif role == "assistant":
                from_role = "gpt"
            
            # 添加转换后的消息
            conversation['conversations'].append({
                "from": from_role,
                "value": content
            })
        
        # 将转换后的会话添加到最终结果中
        converted_data.append(conversation)

# 保存转换后的数据为新的文件
with open('converted_data.json', 'w', encoding='utf-8') as file:
    json.dump(converted_data, file, ensure_ascii=False, indent=2)

print("数据转换完成,结果已保存为 converted_data.json")
3. 直接在地址栏前面加上 cmd 回车之后就会打开当前路径的命令提示符。

在这里插入图片描述

4. 键入 python merge.py 执行

在这里插入图片描述

5. 显示这个就表示执行完毕,数据已清洗和修改完毕。

在这里插入图片描述

在这里插入图片描述

DeepSeek-R1 可视化微调

数据集处理

1. 把 converted_data.json 数据集存放在,LLaMA-Factory 相对路径,我的是:
   E:\Model\LLaMA-Factory-main\LLaMA-Factory-main\data

在这里插入图片描述

2. 编辑 dataset_info.json 文件。

在这里插入图片描述

3. 更改 dataset_info.json 文件,以便LLaMA-Factory 识别训练。
   下面是需要添加的内容。
  "converted_data": {
  "file_name": "converted_data.json",
  "formatting": "sharegpt",
  "columns": {
    "messages": "conversations"
    }
  },

在这里插入图片描述

数据详解

1. 在data 文件夹有个 README_zh.md 的文件打开它
   它记录的就是 alpaca 和 sharegpt 格式 数据集如何配置。

在这里插入图片描述

2. 我这边使用的是 sharegpt 数据集,所以在 dataset_info.json 文件需要填充的内容就如下图所示。
   又因为我不需要:  tools(工具描述) 所以直接删除也行
   当然你有需求也可以加上,只要把数据集修改一下就行了。
   如果还不知道怎么修改就看一下样例数据集 glaive_toolcall_zh_demo.json 也在 data 文件夹下。

在这里插入图片描述

LLaMA-Factory 基础设置

模型下载地址: deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B

1. LLaMA-Factory 运行起来之后把语言更改成中文、模型更改为:DeepSeek-R1-1.5B-Distill
   模型路径就是你下载好存放的模型路径。

在这里插入图片描述

2. 选择我们添加的数据集。

在这里插入图片描述

2. 简单预览一下看看有没有错误,然后关闭就行了。

在这里插入图片描述

3. 你如果不是很了解这些参数什么意思的话,按照我的填就行。

在这里插入图片描述

4. 点击预览命令,可以看到训练参数配置详情。

在这里插入图片描述

在这里插入图片描述

5. 开始训练

在这里插入图片描述

5. 训练详情可以在 Gradio UI 查看损失函数,也可以后台查看详细信息。

在这里插入图片描述

命令行输出

请添加图片描述

6. 训练完毕之后会输出 训练完毕字符 。

在这里插入图片描述

7. 后台也会输出当前模型训练基础指标,简单解释一下吧。
   epoch:表示训练过程中数据集被完整地通过模型一次的次数。
   num_input_tokens_seen:表示在训练过程中模型已经看到的输入标记(例如单词或字)的总数。
   total_flos:表示训练过程中执行的浮点运算次数,单位是 GF。
   train_loss:表示训练集上的损失函数值,损失越低通常意味着模型性能越好。
   train_runtime:表示训练过程的总运行时间。
   train_samples_per_second:表示模型每秒可以处理的样本数。
   train_steps_per_second:表示模型每秒可以执行的训练步骤数。

在这里插入图片描述

8. 模型存放位置,我的地址是:
   LLaMA-Factory-main\saves\DeepSeek-R1-1.5B-Distill\lora
   如果没更改存放位置的话,应该都在 saves 文件夹下。

在这里插入图片描述

模型评估与预测

1. 点击 Evaluate&Predict

在这里插入图片描述

2. 选择需要使用到的数据集。

在这里插入图片描述

3. 预览一下评估命令,我使用的是 RTX4080,大概需要跑 50 多分钟。

请添加图片描述

4. 评估结束之后会给一个评估指标,简单解释一下都是什么意思。   
这些数据是机器学习模型的评估指标,通常用于评估文本生成模型(如机器翻译、文本摘要等)的性能。

predict_bleu-4:用于评估机器翻译模型输出质量的一个指标。bleu-4 计算的是 4-gram(四个连续单词)
		        之间的匹配程度。它用于衡量生成文本与参考文本之间的相似度。

predict_model_preparation_time:模型准备时间,即加载模型并进行初始化所花费的时间,单位是秒。

predict_rouge-1ROUGE 用于评估自动摘要质量的一个指标。rouge-1 衡量的是1-gram(单个词)的召回率
	 	         即生成文本与参考文本中单个词的匹配程度。

predict_rouge-2:rouge-2 衡量的是2-gram(由两个连续单词组成的词组)之间的匹配度。
	            它反映了生成文本和参考文本中连续两个词的相似性。

predict_rouge-l:rouge-l 衡量的是最长公共子序列(LCS)的召回率。LCS考虑了单词的顺序
		         因此更能反映生成文本和参考文本之间的结构相似度。

predict_runtime:模型运行的总时间,通常是指模型在预测或推理过程中所花费的总时间,单位为秒。

predict_samples_per_second:每秒处理的样本数量,表示模型每秒钟可以处理多少个输入样本。

predict_steps_per_second:每秒执行的推理步骤数,表示模型在推理过程中每秒执行多少次推理步骤。

在这里插入图片描述

5. 这个是模型评估具体信息,感兴趣的可以点击去具体查看。

在这里插入图片描述

训练模型对话

1.  选择你想要对话并训练好的模型。

请添加图片描述

2.  点击加载模型,模型加载完毕之后会提示:模型已加载,可以开始聊天了!

在这里插入图片描述

请添加图片描述

3. 然后就可以开始对话了,这个对话就是根据你的风格进行训练出来的,相当于第二个你。

在这里插入图片描述

训练模型导出

1. 点击 Export 切换到模型导出界面。

请添加图片描述

2. 这些参数按需调节吧,导出设备最好选择自动,不然CUDA 执行会有一点问题,导出目录需要填写一下。

请添加图片描述

3. 模型正在导出和导出成功都有提示,如下图所示。

在这里插入图片描述

请添加图片描述

4. 所有模型文件就是在你填写的导出路径文件夹内。
   我的是:LLaMA-Factory-main\model\DeepSeek-R1-1.5B-Distill 微调

请添加图片描述

5. 一般都出完毕之后我都会写一个 requirements.txt 文件,也就是依赖安装文件,方便后期快速部署。
   里面也没什么东西就是当前模型所需依赖,一般使用原本的依赖文件就行,我这里面就是下面的内容。

请添加图片描述

transformers>=4.41.2,<=4.48.3,!=4.46.*,!=4.47.*,!=4.48.0,!=4.48.1,!=4.48.2;python_version<'3.10'
transformers>=4.41.2,<=4.48.3,!=4.46.*,!=4.47.*,!=4.48.0;python_version>='3.10'
datasets>=2.16.0,<=3.2.0
accelerate>=0.34.0,<=1.2.1
peft>=0.11.1,<=0.12.0
trl>=0.8.6,<=0.9.6
tokenizers>=0.19.0,<=0.21.0
gradio>=4.38.0,<=5.12.0
pandas>=2.0.0
scipy
einops
sentencepiece
tiktoken
protobuf
uvicorn
pydantic
fastapi
sse-starlette
matplotlib>=3.7.0
fire
packaging
pyyaml
numpy<2.0.0
av
librosa
tyro<0.9.0

暂时先这样吧,如果实在看不明白就留言,看到我会回复的。希望这个教程对您有帮助!
路漫漫其修远兮,与君共勉。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/970258.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot实战:拦截器

一.拦截器快速入门 1.1了解拦截器 什么是拦截器&#xff1a; 概念 &#xff1a;拦截器是Spring框架提供的核功能之, 主要来拦截的请求, 在指定法前后, 根据业务需要执预先设定的代码。 也就是说, 允许开发员提前预定义些逻辑, 在的请求响应前后执. 也可以在请求前阻其执. …

LabVIEW 用户界面设计基础原则

在设计LabVIEW VI的用户界面时&#xff0c;前面板的外观和布局至关重要。良好的设计不仅提升用户体验&#xff0c;还能提升界面的易用性和可操作性。以下是设计用户界面时的一些关键要点&#xff1a; 1. 前面板设计原则 交互性&#xff1a;组合相关的输入控件和显示控件&#x…

qt-C++笔记之QGraphicsScene和 QGraphicsView中setScene、通过scene得到view、通过view得scene

qt-C++笔记之QGraphicsScene和 QGraphicsView中setScene、通过scene得到view、通过view得scene code review! 文章目录 qt-C++笔记之QGraphicsScene和 QGraphicsView中setScene、通过scene得到view、通过view得scene1.`setScene` 方法2.通过 `scene` 获取它的视图 (`views()`)…

CI/CD部署打包方法

项目目前部署方式&#xff1a; 各地区服务器打包同一个runner&#xff08;需要互相排队&#xff0c;不并发&#xff09;各地区客户端可以并发打包&#xff0c;同个地区客户端打多个包需要排队 部署方法 下载gitlab-runner&#xff1a; https://docs.gitlab.com/runner/insta…

【含文档+源码】基于Web的在线课堂测试课程考评系统的开发与实现

项目介绍 本课程演示的是一款 基于Web的在线课堂测试课程考评系统的开发与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套…

【vscode】VScode Remote SSH配置

VScode使用remote ssh 到服务器上的Docker容器中 1. 配置远程服务器docker容器的端口映射&#xff0c;例如将服务器的2222端口映射到container的22端口(默认) 1.1 在容器系统的sshd_config文件中配置参数 #配置文件 vim /etc/ssh/sshd_config #打开端口号 Port 221.2 建立容…

2月第九讲“探秘Transformer系列”

0.1 流程 使用Transformer来进行文本生成其实就是用模型来预测下一个词&#xff0c;完整流程包括多个阶段&#xff0c;如分词、向量化、计算注意力和采样&#xff0c;具体运作流程如下&#xff1a; 分词&#xff08;tokenize&#xff09;。把用户的输入文本&#xff08;此处假…

crewai框架(0.83.0)添加知识源

官方的文档如下 https://docs.crewai.com/concepts/knowledge但是不知道为什么&#xff0c;可能是版本的问题&#xff08;我用的是0.86.0&#xff09;&#xff0c;参考官方文档的配置我会报错&#xff0c;并且也导入不了数据库&#xff0c;也可能用的不是官方API。本文以常用的…

deepseek + embeding模型搭建本地知识库

上一篇文章讲了ollamadeepseek模型的本地化部署&#xff0c;具体能部署哪一款取决于你的土豪程度&#xff1a; 今天的目标是本地安装部署embeding模型&#xff0c;实现LLMembeding模型的rag知识库的本地化部署&#xff0c;包括&#xff1a; embeding模型的本地化部署anyhingL…

2、树莓派5第一次开机三种方式:使用外设 / 使用网线 / 使用wifi

本文整理了树莓派第一次开机方式&#xff0c;供大家参考 方式一&#xff1a;连接鼠标、键盘、显示器外设开机 树莓派自带USB接口及HDMI接口&#xff0c;因此可以通过USB连接鼠标键盘&#xff0c;HDMI接入显示器&#xff0c;再进行电源供电&#xff0c;就可以完成第一次开机 …

案例-02.部门管理-查询

一.查询部门-需求 二.查询部门-思路 API接口文档 三.代码实现 1.controller层&#xff1a;负责与前端进行交互&#xff0c;接收前端所发来的请求 注&#xff1a;Slf4j用于记录日志使用&#xff0c;可以省略private static Logger log LoggerFactory.getLogger(DeptControlle…

小程序包体积优化指南:静态资源条件编译与分包编译技巧

在开发小程序时&#xff0c;可能大家都遇到过包体积超限的情况&#xff0c;这对多平台支持、用户体验和加载速度带来不少困扰。UniApp 提供了一些强大的功能&#xff0c;比如静态资源的条件编译和分包编译&#xff0c;这些功能可以帮助我们减少小程序的包体积&#xff0c;提高加…

12. QT控件:多元素控件

0. 概述 Qt中提供的多元素控件 QListWidget QListView QTableWidget QTableView QTreeWidget QTreeView xxWidget 和 xxView的区别 以QTableWidget 和 QTableView 为例&#xff1a; QTableView 是基于MVC设计的控件&#xff0c;QTableView自身不持有数据。使用QTableView需…

CAS单点登录(第7版)20.用户界面

如有疑问&#xff0c;请看视频&#xff1a;CAS单点登录&#xff08;第7版&#xff09; 用户界面 概述 概述 对 CAS 用户界面 &#xff08;UI&#xff09; 进行品牌化涉及编辑 CSS 样式表以及一小部分相对简单的 HTML 包含文件&#xff0c;也称为视图。&#xff08;可选&…

android 的抓包工具

charles 抓包工具 官网地址 nullCharles Web Debugging Proxy - Official Sitehttps://www.charlesproxy.com/使用手册一定记得看官网 SSL Certificates • Charles Web Debugging Proxy http请求&#xff1a; 1.启动代理&#xff1a; 2.设置设备端口 3.手机连接当前代理 …

关于视频去水印的一点尝试

一. 视频去水印的几种方法 1. 使用ffmpeg delogo滤镜 delogo 滤镜的原理是通过插值算法&#xff0c;用水印周围的像素填充水印的位置。 示例&#xff1a; ffmpeg -i input.mp4 -filter_complex "[0:v]delogox420:y920:w1070:h60" output.mp4 该命令表示通过滤镜…

预测技术在美团弹性伸缩场景的探索与应用

管理企业大规模服务的弹性伸缩场景中&#xff0c;往往会面临着两个挑战&#xff1a;第一个挑战是精准的负载预测&#xff0c;由于应用实例的启动需要一定预热时间&#xff0c;被动响应式伸缩会在一段时间内影响服务质量&#xff1b;第二个挑战是高效的资源分配&#xff0c;即在…

【含开题报告+文档+PPT+源码】基于Spring+Vue的拾光印记婚纱影楼管理系统

开题报告 本论文旨在探讨基于Spring和Vue框架的拾光印记婚纱影楼管理系统的设计与实现。该系统集成了用户注册登录、个人资料修改、婚庆资讯浏览、婚庆套餐查看、婚纱拍摄预约、婚纱浏览与租赁、客片查看以及在线客服等多项功能&#xff0c;为用户提供了一站式的婚纱影楼服务体…

ASP.NET Core 使用 FileStream 将 FileResult 文件发送到浏览器后删除该文件

FileStream 在向浏览器发送文件时节省了服务器内存和资源&#xff0c;但如果需要删除文件怎么办&#xff1f;本文介绍如何在发送文件后删除文件&#xff1b;用 C# 编写。 另请参阅&#xff1a;位图创建和下载 使用FileStream向浏览器发送数据效率更高&#xff0c;因为文件是从…

字节跳动后端二面

&#x1f4cd;1. 数据库的事务性质&#xff0c;InnoDB是如何实现的&#xff1f; 数据库事务具有ACID特性&#xff0c;即原子性、一致性、隔离性和持久性。InnoDB通过以下机制实现这些特性&#xff1a; &#x1f680; 实现细节&#xff1a; 原子性&#xff1a;通过undo log实…