大模型微调之 在亚马逊AWS上实战LlaMA案例(八)

大模型微调之 在亚马逊AWS上实战LlaMA案例(八)

微调技术

Llama 等语言模型的大小超过 10 GB 甚至 100 GB。微调如此大的模型需要具有非常高的 CUDA 内存的实例。此外,由于模型的大小,训练这些模型可能会非常慢。因此,为了高效微调,我们使用以下优化:

  • 低秩适应 (LoRA) – 这是一种参数高效微调 (PEFT),用于对大型模型进行高效微调。在此,我们冻结整个模型,只在模型中添加一小组可调整的参数或层。例如,我们可以微调不到 1% 的参数,而不是为 Llama 2 7B 训练所有 70 亿个参数。这有助于显着减少内存需求,因为我们只需要存储 1% 参数的梯度、优化器状态和其他训练相关信息。此外,这有助于减少培训时间和成本。有关此方法的更多详细信息,请参阅LoRA:大型语言模型的低秩适应。
    在这里插入图片描述
    在这里插入图片描述

  • Int8 量化– 即使采用 LoRA 等优化,Llama 70B 等模型仍然太大而无法训练。为了减少训练期间的内存占用,我们可以在训练期间使用 Int8 量化。量化通常会降低浮点数据类型的精度。尽管这减少了存储模型权重所需的内存,但由于信息丢失而降低了性能。 Int8 量化仅使用四分之一精度,但不会导致性能下降,因为它不会简单地丢弃位。它将数据从一种类型舍入为另一种类型。要了解 Int8 量化,请参阅LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale。
    在这里插入图片描述

  • 完全分片数据并行 (FSDP) – 这是一种数据并行训练算法,可跨数据并行工作器分片模型参数,并且可以选择将部分训练计算卸载到 CPU。尽管参数分布在不同的 GPU 上,但每个微批次的计算都是 GPU 工作线程本地的。它更均匀地对参数进行分片,并通过训练期间的通信和计算重叠来实现优化的性能

下表对三种 Llama 2 模型的不同方法进行了比较。

在这里插入图片描述

Llama 模型的微调基于以下GitHub 存储库提供的脚本实现。
https://github.com/meta-llama/llama-recipes/tree/main

代码阅读

定义了两个用于文本安全检查的类,AuditNLGSensitiveTopicsSalesforceSafetyChecker。下面是对每一行代码的注释:

# 版权声明,表明这段代码属于 Meta Platforms, Inc. 和其关联公司。
# 根据 Llama 2 社区许可协议的条款,可以对这段软件进行使用和分发。import os  # 导入操作系统接口模块
import torch  # 导入 PyTorch 机器学习库
import warnings  # 导入警告模块,用于发出警告信息
from typing import List  # 导入类型提示模块中的 List 类型
from string import Template  # 导入字符串模块中的模板类
from enum import Enum  # 导入枚举模块中的 Enum 类型class AgentType(Enum):AGENT = "Agent"USER = "User"  # 定义一个枚举类 AgentType,包含两种类型:AGENT 和 USER# 定义一个用于使用 AuditNLG 库进行安全检查的类
class AuditNLGSensitiveTopics(object):def __init__(self):pass  # 初始化方法,目前为空def __call__(self, output_text, **kwargs):# 定义一个可调用的魔术方法,用于检查文本是否包含敏感话题try:from auditnlg.safety.exam import safety_scores  # 尝试导入 safety_scores 模块except ImportError as e:# 如果导入失败,打印错误信息并重新抛出异常print("Could not import optional dependency: auditnlg\nPlease install manually with:\n pip install auditnlg\nFollowed by:\npip install -r requirements.txt")raise edata = [{"output": output_text}]  # 创建一个包含待检查文本的字典列表result = safety_scores(data=data, method="sensitive_topics")  # 调用 safety_scores 方法进行安全评分scores = result[1]["all_scores"][0]  # 获取评分结果is_safe = scores["pred_class"] == "none"  # 判断文本是否安全report = ""  # 初始化报告字符串if not is_safe:# 如果文本不安全,生成一个包含预测类别和各个类别分数的报告report += f"Predicted class: {scores['pred_class']}\n"report += "|" + "|".join(f"{n:^10}" for n in [list(k.keys())[0] for k in scores["class_scores"]]) + "|\n"report += "|" + "|".join(f"{n:^10.5}" for n in [list(k.values())[0] for k in scores["class_scores"]]) + "|\n"return "Sensitive Topics", is_safe, report  # 返回检查结果和报告# 定义一个用于使用 Salesforce 安全检查模型的类
class SalesforceSafetyChecker(object):def __init__(self):pass  # 初始化方法,目前为空def __call__(self, output_text, **kwargs):# 定义一个可调用的魔术方法,用于检查文本是否安全from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, AutoConfig  # 导入所需的模块config = AutoConfig.from_pretrained("Salesforce/safety-flan-t5-base")  # 加载模型配置tokenizer = AutoTokenizer.from_pretrained("Salesforce/safety-flan-t5-base")  # 加载分词器model = AutoModelForSeq2SeqLM.from_pretrained("Salesforce/safety-flan-t5-base", config=config)  # 加载模型model.eval()  # 设置模型为评估模式prefix = "Is the <Text> field safe or unsafe?"  # 定义输入文本的前缀input_ids = tokenizer(prefix + " <Text> " + output_text + " <Context> ", return_tensors="pt").input_ids  # 分词并获取输入 IDif len(input_ids[0]) > 512:# 如果输入长度超过 512 个 token,发出警告warnings.warn("Input length is > 512 token. Safety check result could be incorrect.")with torch.no_grad():# 不计算梯度的情况下生成模型输出outputs = model.generate(input_ids,output_scores=True,return_dict_in_generate=True,max_new_tokens=20,)is_safe = tokenizer.decode(outputs.sequences[0], skip_special_tokens=True).split(" ")[0] == "safe"  # 判断文本是否安全report = ""  # 初始化报告字符串if not is_safe:# 如果文本不安全,生成一个包含各个安全维度分数的报告true_false_ids = tokenizer("true false").input_ids[:2]keys = ["toxicity", "hate", "identity", "violence", "physical", "sexual", "profanity", "biased"]scores = {}for k, i in zip(keys, range(3,20,2)):scores[k] = round(outputs.scores[i][0,true_false_ids].softmax(dim=0)[0].item(), 5)report += "|" + "|".join(f"{n:^10}" for n in scores.keys()) + "|\n"report += "|" + "|".join(f"{n:^10}" for n in scores.values()) + "|\n"return "Salesforce Content Safety Flan T5 Base", is_safe, report  # 返回检查结果和报告def get_total_length(self, data):# 定义一个方法,用于获取输入数据的总长度prefix = "Is the <Text> field safe or unsafe "input_sample = "<Text> {output} <Context> ".format(**data[0])return len(self.tokenizer(prefix + input_sample)["input_ids"])

这段代码的主要功能是使用特定的库和模型来检查文本是否包含不安全的内容,如敏感话题、有害内容等。AuditNLGSensitiveTopics 类使用 auditnlg 库进行敏感话题的检查,而 SalesforceSafetyChecker 类使用 Salesforce 提供的 safety-flan-t5-base 模型进行文本安全检查。两个类都实现了 __call__ 方法,使其实例可以像函数一样被调用,以执行安全检查。此外,SalesforceSafetyChecker 类还提供了一个 get_total_length 方法,用于获取输入数据的总长度。

  • 代码定义了几个类和函数,用于实现文本内容的安全性检查。以下是对每一行代码的注释:
# 定义一个使用Azure内容安全服务进行安全检查的类
class AzureSaftyChecker(object):# 类的初始化方法def __init__(self):try:# 尝试导入所需的Azure内容安全服务的工具from azure.ai.contentsafety import ContentSafetyClientfrom azure.core.credentials import AzureKeyCredential# 从环境变量中获取密钥和端点key = os.environ["CONTENT_SAFETY_KEY"]endpoint = os.environ["CONTENT_SAFETY_ENDPOINT"]except ImportError:# 如果无法导入所需的工具,抛出异常raise Exception("Could not import required package azure-ai-contentsafety. Install with: pip install azure-ai-contentsafety")except KeyError:# 如果环境变量未设置,抛出异常raise Exception("Environment variables not set. Please set CONTENT_SAFETY_KEY and CONTENT_SAFETY_ENDPOINT.")# 初始化Azure内容安全服务的客户端self.client = ContentSafetyClient(endpoint, AzureKeyCredential(key))# 定义一个方法,用于调用时执行安全检查def __call__(self, output_text, **kwargs):from azure.core.exceptions import HttpResponseErrorfrom azure.ai.contentsafety.models import AnalyzeTextOptions, TextCategory# 打印输出文本的长度print(len(output_text))# 如果输出文本过长(超过1000个字符),抛出异常if len(output_text) > 1000:raise Exception("Input length to safety check is too long (>1000).")# 定义要检查的文本类别categories = [TextCategory.VIOLENCE,TextCategory.SELF_HARM,TextCategory.SEXUAL,TextCategory.HATE,]# 创建请求对象request = AnalyzeTextOptions(text=output_text, categories=categories)try:# 调用Azure内容安全服务的analyze_text方法进行文本分析response = self.client.analyze_text(request)except HttpResponseError as e:# 如果发生HTTP响应错误,打印错误信息并抛出异常print("Analyze text failed.")if e.error:print(f"Error code: {e.error.code}")print(f"Error message: {e.error.message}")raiseprint(e)raise e# 定义不同严重性等级的文本描述levels = {0: "Safe", 2: "Low", 4: "Medium", 6: "High"}# 获取每个类别的严重性等级severities = [getattr(response, c.name.lower() + "_result").severity for c in categories]# 定义默认的安全等级DEFAULT_LEVELS = [0, 0, 0, 0]# 检查文本是否安全is_safe = all([s <= l for s, l in zip(severities, DEFAULT_LEVELS)])# 构建安全检查报告report = ""if not is_safe:report = "|" + "|".join(f"{c.name:^10}" for c in categories) + "|\n"report += "|" + "|".join(f"{levels[s]:^10}" for s in severities) + "|\n"# 返回安全检查的结果和报告return "Azure Content Saftey API", is_safe, report# 定义另一个安全检查类LlamaGuardSafetyChecker,使用LlamaGuard模型进行安全检查
class LlamaGuardSafetyChecker(object):# 类的初始化方法def __init__(self):from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfigfrom llama_recipes.inference.prompt_format_utils import build_default_prompt, create_conversation, LlamaGuardVersion# 使用的模型IDmodel_id = "meta-llama/LlamaGuard-7b"# 量化配置quantization_config = BitsAndBytesConfig(load_in_8bit=True)# 初始化分词器和模型self.tokenizer = AutoTokenizer.from_pretrained(model_id)self.model = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=quantization_config, device_map="auto")# 定义一个方法,用于调用时执行安全检查def __call__(self, output_text, **kwargs):# 获取可选参数agent_type和user_promptagent_type = kwargs.get('agent_type', AgentType.USER)user_prompt = kwargs.get('user_prompt', "")# 准备模型的输入提示model_prompt = output_text.strip()if(agent_type == AgentType.AGENT):# 如果是代理类型,处理user_prompt和model_promptif user_prompt == "":print("empty user prompt for agent check, returning unsafe")return "Llama Guard", False, "Missing user_prompt from Agent response check"else:model_prompt = model_prompt.replace(user_prompt, "")user_prompt = f"User: {user_prompt}"agent_prompt = f"Agent: {model_prompt}"chat = [{"role": "user", "content": user_prompt},{"role": "assistant", "content": agent_prompt},]else:# 如果不是代理类型,构建用户聊天对象chat = [{"role": "user", "content": model_prompt},]# 使用分词器将聊天内容转换为输入IDinput_ids = self.tokenizer.apply_chat_template(chat, return_tensors="pt").to("cuda")# 获取输入ID的长度prompt_len = input_ids.shape[-1]# 使用模型生成文本output = self.model.generate(input_ids=input_ids, max_new_tokens=100, pad_token_id=0)# 解码生成的文本result = self.tokenizer.decode(output[0][prompt_len:], skip_special_tokens=True)# 获取生成文本的第一行splitted_result = result.split("\n")[0]# 检查生成的文本是否为"safe"is_safe = splitted_result == "safe"# 构建安全检查报告report = result# 返回安全检查的结果和报告return "Llama Guard", is_safe, report# 定义一个函数,根据提供的选项确定使用哪种安全检查器
def get_safety_checker(enable_azure_content_safety,enable_sensitive_topics,enable_salesforce_content_safety,enable_llamaguard_content_safety):# 初始化安全检查器列表safety_checker = []# 如果启用了Azure内容安全检查,添加AzureSaftyChecker实例到列表if enable_azure_content_safety:safety_checker.append(AzureSaftyChecker())# 如果启用了敏感话题检查,添加AuditNLGSensitiveTopics实例到列表(该类在代码中未定义)if enable_sensitive_topics:safety_checker.append(AuditNLGSensitiveTopics())# 如果启用了Salesforce内容安全检查,添加SalesforceSafetyChecker实例到列表(该类在代码中未定义)if enable_salesforce_content_safety:safety_checker.append(SalesforceSafetyChecker())# 如果启用了LlamaGuard内容安全检查,添加LlamaGuardSafetyChecker实例到列表if enable_llamaguard_content_safety:safety_checker.append(LlamaGuardSafetyChecker())# 返回安全检查器列表return safety_checker

实践

在大模型微调之 在亚马逊AWS上实战LlaMA案例(七)系列博客中,通过微调一个 LLaMA 2 模型。
通过摘要任务中的示例演示了对 Dolly 数据集的子集的微调。以下是示例输入,其中包含微调和非微调的响应以及地面实况响应:

输入模型:

Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\n\n### Instruction:\nWhen did Felix Luna die?\n\n### Input:\nFélix César Luna (30 September 1925 – 5 November 2009) was an Argentine writer, lyricist and historian.\n\n\n\n### Response:\n

实际的标签响应:

Felix Luna died on November 5th, 2009

非微调模型的响应:

Félix César Luna (30 September 19255 November 2009) was an Argentine\n\nWhen did Luna die?\n\n\n### Explanation:\nWe answer the question with the input's date of birth and the date of death.\n\n\n### Solution: 1102\n

微调模型的响应:

Félix Luna died on November 5th, 2009.\n\n

大模型技术分享

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

《企业级生成式人工智能LLM大模型技术、算法及案例实战》线上高级研修讲座

模块一:Generative AI 原理本质、技术内核及工程实践周期详解
模块二:工业级 Prompting 技术内幕及端到端的基于LLM 的会议助理实战
模块三:三大 Llama 2 模型详解及实战构建安全可靠的智能对话系统
模块四:生产环境下 GenAI/LLMs 的五大核心问题及构建健壮的应用实战
模块五:大模型应用开发技术:Agentic-based 应用技术及案例实战
模块六:LLM 大模型微调及模型 Quantization 技术及案例实战
模块七:大模型高效微调 PEFT 算法、技术、流程及代码实战进阶
模块八:LLM 模型对齐技术、流程及进行文本Toxicity 分析实战
模块九:构建安全的 GenAI/LLMs 核心技术Red Teaming 解密实战
模块十:构建可信赖的企业私有安全大模型Responsible AI 实战 

Llama3关键技术深度解析与构建Responsible AI、算法及开发落地实战

1、Llama开源模型家族大模型技术、工具和多模态详解:学员将深入了解Meta Llama 3的创新之处,比如其在语言模型技术上的突破,并学习到如何在Llama 3中构建trust and safety AI。他们将详细了解Llama 3的五大技术分支及工具,以及如何在AWS上实战Llama指令微调的案例。
2、解密Llama 3 Foundation Model模型结构特色技术及代码实现:深入了解Llama 3中的各种技术,比如Tiktokenizer、KV Cache、Grouped Multi-Query Attention等。通过项目二逐行剖析Llama 3的源码,加深对技术的理解。
3、解密Llama 3 Foundation Model模型结构核心技术及代码实现:SwiGLU Activation Function、FeedForward Block、Encoder Block等。通过项目三学习Llama 3的推理及Inferencing代码,加强对技术的实践理解。
4、基于LangGraph on Llama 3构建Responsible AI实战体验:通过项目四在Llama 3上实战基于LangGraph的Responsible AI项目。他们将了解到LangGraph的三大核心组件、运行机制和流程步骤,从而加强对Responsible AI的实践能力。
5、Llama模型家族构建技术构建安全可信赖企业级AI应用内幕详解:深入了解构建安全可靠的企业级AI应用所需的关键技术,比如Code Llama、Llama Guard等。项目五实战构建安全可靠的对话智能项目升级版,加强对安全性的实践理解。
6、Llama模型家族Fine-tuning技术与算法实战:学员将学习Fine-tuning技术与算法,比如Supervised Fine-Tuning(SFT)、Reward Model技术、PPO算法、DPO算法等。项目六动手实现PPO及DPO算法,加强对算法的理解和应用能力。
7、Llama模型家族基于AI反馈的强化学习技术解密:深入学习Llama模型家族基于AI反馈的强化学习技术,比如RLAIF和RLHF。项目七实战基于RLAIF的Constitutional AI。
8、Llama 3中的DPO原理、算法、组件及具体实现及算法进阶:学习Llama 3中结合使用PPO和DPO算法,剖析DPO的原理和工作机制,详细解析DPO中的关键算法组件,并通过综合项目八从零开始动手实现和测试DPO算法,同时课程将解密DPO进阶技术Iterative DPO及IPO算法。
9、Llama模型家族Safety设计与实现:在这个模块中,学员将学习Llama模型家族的Safety设计与实现,比如Safety in Pretraining、Safety Fine-Tuning等。构建安全可靠的GenAI/LLMs项目开发。
10、Llama 3构建可信赖的企业私有安全大模型Responsible AI系统:构建可信赖的企业私有安全大模型Responsible AI系统,掌握Llama 3的Constitutional AI、Red Teaming。

解码Sora架构、技术及应用

一、为何Sora通往AGI道路的里程碑?
1,探索从大规模语言模型(LLM)到大规模视觉模型(LVM)的关键转变,揭示其在实现通用人工智能(AGI)中的作用。
2,展示Visual Data和Text Data结合的成功案例,解析Sora在此过程中扮演的关键角色。
3,详细介绍Sora如何依据文本指令生成具有三维一致性(3D consistency)的视频内容。 4,解析Sora如何根据图像或视频生成高保真内容的技术路径。
5,探讨Sora在不同应用场景中的实践价值及其面临的挑战和局限性。

二、解码Sora架构原理
1,DiT (Diffusion Transformer)架构详解
2,DiT是如何帮助Sora实现Consistent、Realistic、Imaginative视频内容的?
3,探讨为何选用Transformer作为Diffusion的核心网络,而非技术如U-Net。
4,DiT的Patchification原理及流程,揭示其在处理视频和图像数据中的重要性。
5,Conditional Diffusion过程详解,及其在内容生成过程中的作用。
三、解码Sora关键技术解密
1,Sora如何利用Transformer和Diffusion技术理解物体间的互动,及其对模拟复杂互动场景的重要性。
2,为何说Space-time patches是Sora技术的核心,及其对视频生成能力的提升作用。
3,Spacetime latent patches详解,探讨其在视频压缩和生成中的关键角色。
4,Sora Simulator如何利用Space-time patches构建digital和physical世界,及其对模拟真实世界变化的能力。
5,Sora如何实现faithfully按照用户输入文本而生成内容,探讨背后的技术与创新。
6,Sora为何依据abstract concept而不是依据具体的pixels进行内容生成,及其对模型生成质量与多样性的影响。

在这里插入图片描述

举办《Llama3关键技术深度解析与构建Responsible AI、算法及开发落地实战》线上高级研修讲座

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

element 输入框禁止输入空格以及复制的值进去删除空格(vue自定义指令)开箱即用

实例图&#xff1a; 代码&#xff1a; //输入框禁止输入空格 Vue.directive(noSpace, {bind(el) {//禁止输入空格el.addEventListener("keydown", function (event) {if (event.keyCode 32) {event.preventDefault();}});//复制值时去掉空格el.addEventListener(&q…

node——使用localtunnel做内网穿透

前言 内网穿透是一种允许外网用户访问内网主机的技术。 将您的本地主机公开到世界各地&#xff0c;使之能访问&#xff0c;无需混淆DNS或部署。 内网穿透技术通常涉及以下几个关键步骤&#xff1a; 使用公网服务器或NAT&#xff08;网络地址转换&#xff09;设备&#xff1a;这…

「51媒体」邀请媒体参会报道和媒体发稿有啥不同

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体参会报道和媒体发稿是新闻报道的两种不同形式&#xff0c;它们的主要区别在于内容来源、报道方式和目的。 内容来源&#xff1a; 媒体参会报道&#xff1a;通常指的是记者或媒体代…

火绒安全原理、用法、案例和注意事项

火绒安全是一款功能强大的安全软件&#xff0c;它采用了先进的安全技术和算法&#xff0c;通过实时监测、恶意代码识别、防火墙功能、沙箱技术和网络保护等多种手段&#xff0c;为用户提供全面的计算机安全防护。 1.为什么选用火绒安全&#xff1f; 火绒安全是一款优秀的安全软…

2024年第九届数维杯大学生数学建模挑战赛B 题思路1.0版本

B题&#xff1a;生物质和煤共热解问题的研究 数维杯分享资料&#xff08;问题一代码论文思路&#xff09;链接&#xff08;18点更新&#xff09;&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1GSv9dkqcY6G-XUnd0sJe_A 提取码&#xff1a;sxjm 题目分析&#xff1…

4G,5G执法记录仪人脸识别、人脸比对使用说明

4G/5G执法记录仪或4G/5G智能安全帽&#xff0c;做前端人脸识别、人脸比对&#xff0c;采用了上市公司的成熟的人脸识别算法&#xff0c;需要支付LICENSE给算法公司&#xff0c;理论上前端设备支持30K的人脸库&#xff08;受设备运行内存限制&#xff09;。 4G/5G执法记录仪侧要…

【Spring源码分析】ResolvableType

【Spring源码分析】ResolvableType 参考 目录 文章目录 【Spring源码分析】ResolvableType一、ParameterizedType 参数化类型&#xff0c;即泛型&#xff1b;例如&#xff1a;List< T>、Map< K,V>等带有参数化的对象;二、GenericArrayType—— 泛型数组 泛型数组…

Flink container exit 143 问题排查

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

一站式PDF解决方案:如何部署自己的PDF全能工具(Docker部署和群晖部署教程)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 开始部署 📒📝 Docker部署📝 群晖部署📝 本地安装⚓️ 相关链接 ⚓️📖 介绍 📖 在数字化办公的今天,PDF文件几乎成了我们日常工作中不可或缺的一部分。但你是否曾因为PDF文件的编辑、转换、合并等问题而头疼?如果…

对称二叉树

给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;falses 思路&#xff1a;我刚开始是想着用…

【35分钟掌握金融风控策略21】贷前额度策略

目录 贷前策略审批流程和统一额度管理 贷前策略审批流程 统一额度管理 预授信策略 贷前策略审批流程和统一额度管理 贷前包含了多个风控场景&#xff0c;这些风控场景的策略在执行时是否存在先后顺序呢&#xff1f;在贷前&#xff0c;除上述主要的风控场景&#xff0c;还有…

使用Selenium破解滑动验证码的原理及解决思路

1、获取页面元素信息&#xff1a; 使用Selenium打开目标网页&#xff0c;并通过相关方法获取滑块、背景图等元素的位置和属性信息。可以使用Selenium提供的定位方法&#xff08;如xpath、CSS选择器等&#xff09;来找到这些元素。 可以使用find_element_by_xpath或find_elemen…

基于STC12C5A60S2系列1T 8051单片机实现一主单片机给一从单片机发送数据的串口通信功能

基于STC12C5A60S2系列1T 8051单片机实现一主单片机给一从单片机发送数据的串口通信功能 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机串口通信介绍STC12C5A60S2系列1T 8051单片机串口通信的结构基于STC12C5A60S2系列1T 8051单片机串口通信的特殊功能寄存…

二叉树的非递归遍历(c++)

前序 . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/binary-tree-preorder-traversal/description/ 1---2---4---5--…

GEE数据集——高分辨率全球树冠高度地图(1 米)Meta 公司

高分辨率 1 米全球树冠高度地图 简介 全球树冠高度地图数据集提供了对全球树冠高度的全面了解,有助于对森林生态系统、碳固存和气候变化减缓工作进行精确监测。该数据集由 Meta 和世界资源研究所合作开发,是了解森林结构和动态的基石。通过融合最先进的卫星图像和先进的人工…

Go实现树莓派读取at24c02 eeprom读写数据

步骤 启用i2c 参考 Go实现树莓派读取bh1750光照强度 代码 package mainimport ("fmt""periph.io/x/conn/v3/i2c" )type AT24C02Device struct {dev *i2c.Dev }func NewAT24C02Device(addr uint16, bus i2c.BusCloser) (*AT24C02Device, error) {var (d…

千亿美元《人工智能》超级计算机!

微软与OpenAI的合作将引领人工智能领域的巨大飞跃。他们共同打造的百亿美元人工智能超级计算机项目将推动技术的边界&#xff0c;为未来科技发展开辟全新的可能性。这一合作不仅体现了科技巨头之间的紧密合作&#xff0c;也展现了人工智能在全球范围内的战略重要性。 微软和 O…

截图文字怎么识别?这里有三种识别方法

截图文字怎么识别&#xff1f;在数字化时代&#xff0c;信息的快速处理和转换成为了提高工作效率的关键。截图文字识别技术&#xff0c;作为连接视觉信息与数字文本的桥梁&#xff0c;极大地便利了我们的工作和生活。它允许用户从图像中提取文字内容&#xff0c;进而编辑、搜索…

luceda ipkiss教程 71:统计线路中器件的个数

**案例分享&#xff1a;**统计线路中某一器件的个数 如&#xff0c;统计SplitterTree中mmi的个数&#xff1a; 所有代码如下&#xff1a; # Copyright (C) 2020 Luceda Photonicsfrom si_fab import all as pdk from ipkiss3 import all as i3class GeneralizedSplitterTree…

第一步->手撕spring源码之Bean容器创建

什么是bean容器 可以存放数据的具体数据结构实现&#xff0c;都可以称之为容器。例如&#xff1a;ArrayList、LinkedList、HashSet等。bean就是对象的定义 spring中bean的多样性需要区分就需要用到键值索引的场景 故选择 HashMap。 什么是hashMap&#xff1f; HashMap 是一种基…