【浅学】大模型(科普向_持续更新中)

1. 大模型概述

大模型是指具有数千万甚至数亿参数的深度学习模型。

当我们提及大模型时,通常指的是大语言模型(Large Language Model,简称LLM),即文字问答模型,其典型代表便是OpenAI的GPT系列。然而,随着技术的日新月异,大模型已经不单单局限于自然语言处理(Natural Language Processing)领域的发光发热,而是逐渐渗透到了其他多个领域。例如,Midjourney,Inc.推出的文生图模型Midjourney、OpenAI推出的文生视频模型Sora等等,都是大模型在不同领域的成功应用案例。

大模型的原理是基于深度学习,它利用大量的数据和计算资源来训练具有大量参数的神经网络模型。通过不断地调整模型参数,使得模型能够在各种任务中取得最佳表现。通常说的大模型的“大”的特点体现在:参数数量庞大、训练数据量大、计算资源需求高等。很多先进的模型由于拥有很“大”的特点,使得模型参数越来越多,泛化性能越来越好,在各种专门的领域输出结果也越来越准确。现在市面上比较流行的任务有AI生成语言(ChatGPT类产品)、AI生成图片(Midjourney类产品)等,都是围绕生成这个概念来展开应用。

“生成”简单来说就是根据给定内容,预测和输出接下来对应内容的能力。比如最直观的例子就是成语接龙,可以把大语言模型想象成成语接龙功能的智能版本,也就是根据最后一个字输出接下来一段文章或者一个句子。

2. 大模型核心技术——一个基本架构,三个形式

传统的语言助手,如Siri和小爱同学,主要依赖于RNN(循环神经网络)或LSTM(长短期记忆)技术。然而,这些技术存在一个显著的弊端:随着上下文的增加,模型会逐渐“遗忘”之前的信息,导致在连续对话中,语言助手无法提供连贯、准确的回应,给出的回答更是牛头不对马嘴。GPT则采用了Transformer架构,有效解决模型遗忘历史信息的问题,

2.1 Transformer

当前流行的大模型的网络架构其实并没有很多新的技术,还是一直沿用当前NLP领域最热门最有效的架构——Transformer结构。相比于传统的循环神经网络(RNN)和长短时记忆网络(LSTM),Transformer具有独特的注意力机制(Attention),这相当于给模型加强理解力,对更重要的词能给予更多关注,同时该机制具有更好的并行性和扩展性,能够处理更长的序列,立马成为NLP领域具有奠基性能力的模型,在各类文本相关的序列任务中取得不错的效果。

2.1.1 网络结构

由输入部分(输入输出嵌入与位置编码)、多层编码器、多层解码器以及输出部分(输出线性层与Softmax)四大部分组成。
在这里插入图片描述

  • 输入部分:
    源文本嵌入层:将源文本中的词汇数字表示转换为向量表示,捕捉词汇间的关系。
    位置编码器:为输入序列的每个位置生成位置向量,以便模型能够理解序列中的位置信息。
    目标文本嵌入层(在解码器中使用):将目标文本中的词汇数字表示转换为向量表示。

  • 编码器部分:
    由N个编码器层堆叠而成。
    每个编码器层由两个子层连接结构组成:第一个子层是一个多头自注意力子层,第二个子层是一个前馈全连接子层。每个子层后都接有一个规范化层和一个残差连接。

  • 解码器部分:
    由N个解码器层堆叠而成。
    每个解码器层由三个子层连接结构组成:第一个子层是一个带掩码的多头自注意力子层,第二个子层是一个多头注意力子层(编码器到解码器),第三个子层是一个前馈全连接子层。每个子层后都接有一个规范化层和一个残差连接。

  • 输出部分:
    线性层:将解码器输出的向量转换为最终的输出维度。
    Softmax层:将线性层的输出转换为概率分布,以便进行最终的预测。

2.1.2 工作原理

在这里插入图片描述

Transformer工作原理
  • 输入线性变换:对于输入的Query(查询)、Key(键)和Value(值)向量,首先通过线性变换将它们映射到不同的子空间。这些线性变换的参数是模型需要学习的。

  • 分割多头:经过线性变换后,Query、Key和Value向量被分割成多个头。每个头都会独立地进行注意力计算。

  • 缩放点积注意力:在每个头内部,使用缩放点积注意力来计算Query和Key之间的注意力分数。这个分数决定了在生成输出时,模型应该关注Value向量的部分。

  • 注意力权重应用:将计算出的注意力权重应用于Value向量,得到加权的中间输出。这个过程可以理解为根据注意力权重对输入信息进行筛选和聚焦。

  • 拼接和线性变换:将所有头的加权输出拼接在一起,然后通过一个线性变换得到最终的Multi-Head Attention输出。

2.1.3 解决的问题

  • 长期依赖问题:在处理长序列输入时,传统的循环神经网络(RNN)会面临长期依赖问题,即难以捕捉序列中的远距离依赖关系。Transformer模型通过自注意力机制,能够在不同位置对序列中的每个元素赋予不同的重要性,从而有效地捕捉长距离依赖关系。

  • 并行计算问题:传统的RNN模型在计算时需要按照序列的顺序依次进行,无法实现并行计算,导致计算效率较低。而Transformer模型采用了编码器-解码器结构,允许模型在输入序列上进行编码,然后在输出序列上进行解码,从而实现了并行计算,大大提高了模型训练的速度。

  • 特征抽取问题:Transformer模型通过自注意力机制和多层神经网络结构,能够有效地从输入序列中抽取丰富的特征信息,为后续的任务提供更好的支持。

2.2 主流框架

根据这种网络架构的变形,主流的框架可以分为Encoder-Decoder, Encoder-Only和Decoder-Only

2.2.1 Encoder-Only

仅包含编码器部分,主要适用于不需要生成序列的任务,只需要对输入进行编码和处理的单向任务场景,如文本分类、情感分析等,这类代表是BERT相关的模型,例如BERT,RoBERT,ALBERT等

BERT

BERT是一种基于Transformer的预训练语言模型,它的最大创新之处在于引入了双向Transformer编码器,这使得模型可以同时考虑输入序列的前后上下文信息。
在这里插入图片描述

BERT架构
BERT的工作原理是通过在大规模未标注数据上执行预训练任务(如Masked Language Model来捕获文本中词汇的双向上下文关系,以及Next Sentence Prediction来理解句子间的逻辑关系),再将预训练的模型针对特定任务进行Fine tuning,从而在各种自然语言处理任务中实现高性能。

2.2.2 Encoder-Decoder

既包含编码器也包含解码器,通常用于序列到序列(Seq2Seq)任务,如机器翻译、对话生成等,这类代表是以Google训出来T5为代表相关大模型。

2.2.3 Decoder-Only

仅包含解码器部分,通常用于序列生成任务,如文本生成、机器翻译等。这类结构的模型适用于需要生成序列的任务,可以从输入的编码中生成相应的序列。同时还有一个重要特点是可以进行无监督预训练。在预训练阶段,模型通过大量的无标注数据学习语言的统计模式和语义信息。这种方法可以使得模型具备广泛的语言知识和理解能力。在预训练之后,模型可以进行有监督微调,用于特定的下游任务(如机器翻译、文本生成等)。这类结构的代表也就是我们平时非常熟悉的GPT模型的结构,所有该家族的网络结构都是基于Decoder-Only的形式来逐步演化。

GPT(Generative Pre-trained Transformer)

在这里插入图片描述
GPT架构:一种基于Transformer的预训练语言模型,它的最大创新之处在于使用了单向Transformer编码器,这使得模型可以更好地捕捉输入序列的上下文信息。
在这里插入图片描述

GPT架构

GPT的工作原理是首先通过无监督预训练学习语言的统计规律,然后利用有监督微调将通用语言学知识与具体任务结合,提升模型性能。

  • GPT无监督预训练旨在通过大型Transformer解码器和自回归训练,利用未标注数据学习语言的统计规律,从而生成流利且符合真实语言模式的文本。
    在这里插入图片描述
无监督预训练
  • GPT有监督微调通过统一网络结构、利用预训练参数初始化和针对任务进行Fine-tuning,将通用语言学知识与具体任务相结合,提升模型性能。
    在这里插入图片描述
有监督预微调

2.3 训练步骤

训练方式,这里主要参考OpenAI发表的关于InstructGPT的相关训练步骤,主流的大模型训练基本形式大多也是类似的:
在这里插入图片描述
1、预训练(Pretraining)

预训练是大模型训练的第一步,目的是让模型学习语言的统计模式和语义信息。主流的预训练阶段步骤基本都是近似的,其中最重要的就是数据,需要收集大量的无标注数据,例如互联网上的文本、新闻、博客、论坛等等。这些数据可以是多种语言的,并且需要经过一定的清洗和处理,以去除噪音,无关信息以及个人隐私相关的,最后会以tokenizer粒度输入到上文提到的语言模型中。这些数据经过清洗和处理后,用于训练和优化语言模型。预训练过程中,模型会学习词汇、句法和语义的规律,以及上下文之间的关系。OpenAI的ChatGPT4能有如此惊人的效果,主要的一个原因就是他们训练数据源比较优质。

2、 指令微调阶段(Instruction Tuning Stage)

在完成预训练后,就可以通过指令微调去挖掘和增强语言模型本身具备的能力,这步也是很多企业以及科研研究人员利用大模型的重要步骤。

Instruction tuning(指令微调)是大模型训练的一个阶段,它是一种有监督微调的特殊形式,旨在让模型理解和遵循人类指令。在指令微调阶段,首先需要准备一系列的NLP任务,并将每个任务转化为指令形式,其中指令包括人类对模型应该执行的任务描述和期望的输出结果。然后,使用这些指令对已经预训练好的大语言模型进行监督学习,使得模型通过学习和适应指令来提高其在特定任务上的表现。

为了让模型训练更加高效和简单,这个阶段还有一种高效的fine-tuning技术,这为普通的从业者打开了通向使用大模型的捷径。

Parameter-Efficient Fine-Tuning (PEFT)旨在通过最小化微调参数的数量和计算复杂度,达到高效的迁移学习的目的,提高预训练模型在新任务上的性能,从而缓解大型预训练模型的训练成本。在训练过程中,预训练模型的参数保持不变,只需微调少量的额外参数,就可以达到与全量微调相当的性能。

目前,很多研究对PEFT方法进行了探索,例如Adapter Tuning和Prefix Tuning等。其中,Adapter Tuning方法在面对特定的下游任务时,将预训练模型中的某些层固定,只微调接近下游任务的几层参数。而Prefix Tuning方法则是在预训练模型的基础上,添加一些额外的参数,这些参数在训练过程中会根据特定的任务进行更新和调整。

工业界现在常用的Adapter Tuning的技术是Low-Rank Adaptation(LoRA) 。它通过最小化微调参数的数量和计算复杂度,实现高效的迁移学习,以提高预训练模型在新任务上的性能。LoRA 的核心思想是将预训练模型的权重矩阵分解为两个低秩矩阵的乘积。通过这种分解,可以显著减少微调参数的数量,并降低计算复杂度。该方式和机器学习中经典的降维的思想很类似,类似地,LoRA 使用了矩阵分解技术中的奇异值分解 (Singular Value Decomposition, SVD) 或低秩近似 (Low-Rank Approximation) 方法,将原始权重矩阵分解为两个低秩矩阵的乘积。
在这里插入图片描述

在微调过程中,LoRA 只更新这两个低秩矩阵的参数,而保持其他预训练参数固定不变。这样可以显著减少微调所需的计算资源和时间,并且在很多任务上取得了与全量微调相当的性能。

LoRA技术的引入使得在大规模预训练模型上进行微调更加高效和可行,为实际应用提供了更多可能性。

3、对齐微调(Alignment Tuning)

主要目标在于将语言模型与人类的偏好、价值观进行对齐,其中最重要的技术就是使用RLHF(reinforcement learning from human feedback)来进行对齐微调。
在这里插入图片描述
Step 1.预训练模型的有监督微调

先收集一个提示词集合,并要求标注人员写出高质量的回复,然后使用该数据集以监督的方式微调预训练的基础模型。

Step 2.训练奖励模型

这个过程涉及到与人类评估者进行对话,并根据他们的反馈来进行调整和优化。评估者会根据个人偏好对模型生成的回复进行排序,从而指导模型生成更符合人类期望的回复。这种基于人类反馈的训练方式可以帮助模型捕捉到更多人类语言的特点和习惯,从而提升模型的生成能力。

Step 3.利用强化学习模型微调

主要使用了强化学习的邻近策略优化(PPO,proximal policy optimization )算法,对于每个时间步,PPO算法会计算当前产生和初始化的KL散度,根据这个分布来计算一个状态或动作的预期回报,然后使用这个回报来更新策略,达到对SFT模型进一步优化。

但是这种算法存在一些比较明显的缺点,比如PPO是on-policy算法,每一次更新都需要收集新的样本,这就会导致算法的效率低下,并且更新是在每次训练时进行的,因此策略更新比较频繁,这就会导致算法的稳定性较差。

所以当前有很多新的技术出来替代RLHF技术:
在这里插入图片描述
直接偏好优化(DPO)是一种对传统RLHF替代的技术,作者在论文中提出拟合一个反映人类偏好的奖励模型,将奖励函数和最优策略之间的映射联系起来,从而把约束奖励最大化问题转化为一个单阶段的策略训练问题。然后通过强化学习来微调大型无监督语言模型,以最大化这个预估的奖励。这个算法具有简单有效和计算轻量级的特点,不需要拟合奖励模型,只需要进行单阶段训练,也不需要大量的超参数调节,所以在响应质量方面也通常优于传统的RLHF。另外还有RLAIF从采样方式,生成训练奖励模型的评分的角度来替代原有的PPO的RLHF进行训练。
对齐微调是一个关键的阶段,这一阶段使用强化学习从人类反馈中进行微调,以进一步优化模型的生成能力。它通过与人类评估者和用户的互动,不断优化模型的生成能力,以更好地满足人类期望和需求。

2.4 prompt

作为大模型的一个技术分支,很多人接触大模型的第一步就是写prompt,而这的确也是大模型发展的其中一个重要方向技术,也是很多实际运用问题解决的关键步骤。

Prompt技术的基本思想是,通过给模型提供一个或多个提示词或短语,来指导模型生成符合要求的输出。本质上是通过恰当的初始化参数(也就是适当的输入语言描述),来激发语言模型本身的潜力。例如,在文本分类任务中,我们可以给模型提供一个类别标签的列表,并要求它生成与这些类别相关的文本;在机器翻译任务中,我们可以给模型提供目标语言的一段文本,并要求它翻译这段文本。

Prompt根据常用的使用场景可以概括为以下四种:

  • Zero-Shot Prompt: 在零样本场景下使用,模型根据提示或指令进行任务处理,不需要针对每个新任务或领域都进行专门的训练,这类一般作为训练通用大模型的最常见的评估手段。
  • Few-Shot Prompt: 在少样本场景下使用,模型从少量示例中学习特定任务,利用迁移学习的方法来提高泛化性能,该类prompt也是很多实际应用案例都采取来进行大模型微调训练的方式。
  • Chain-of-thought prompt:这类prompt常见于推理复杂任务,它通过引导模型逐步解决问题,以一系列连贯的步骤展示推理的思路和逻辑关系。通过这种逐步推理的方式,模型可以逐渐获得更多信息,并在整个推理过程中累积正确的推断。
  • Multimodal prompt:这类prompt包含的信息就更丰富,主要是将不同模态的信息(如文本、图像、音频等)融合到一起,形成一种多模态的提示,以帮助模型更好地理解和处理输入数据。比如在问答系统中,可以将问题和相关图像作为多模态输入,以帮助模型更好地理解问题的含义和上下文背景,并生成更加准确和全面的答案。

在具体实践中,根据场景设计合适的prompt进行优化,评估也是大模型工程中重要的一步,对大模型准确率和可靠性提升是必不可少的,这步也是将模型潜在强大能力兑现的关键一环。

3. 大模型相关优化研究:

Octopus v2

在大模型落地应用的过程中,端侧 AI 是非常重要的一个方向。
近日,斯坦福大学研究人员推出的 Octopus v2 火了,受到了开发者社区的极大关注,模型一夜下载量超 2k。
20 亿参数的 Octopus v2 可以在智能手机、汽车、个人电脑等端侧运行,在准确性和延迟方面超越了 GPT-4,并将上下文长度减少了 95%。此外,Octopus v2 比 Llama7B + RAG 方案快 36 倍。
Octopus-V2-2B 是一个拥有 20 亿参数的开源语言模型,专为 Android API 量身定制,旨在在 Android 设备上无缝运行,并将实用性扩展到从 Android 系统管理到多个设备的编排等各种应用程序。
论文:Octopus v2: On-device language model for super agent
论文地址:https://arxiv.org/abs/2404.01744
模型主页:https://huggingface.co/NexaAIDev/Octopus-v2

GPT-fast

GPT-fast究竟是如何给大模型提速的?总的来说,用到这几种方法:

  • Torch.compile:一个专门为PyTorch模型设计的编译器,可以提升模型运行效率。
  • GPU量化:通过减少计算的精度来加速模型的运算速度。
  • 推测性解码:使用一个较小的模型来预测较大模型的输出,以此加快大语言模型的运算。
  • 张量并行性:通过在多个硬件设备上分布模型的运算来加速处理速度。

TensorRT-LLM

当前 LLM 模型推理的主要瓶颈是 GPU 显存资源不足。因此,各类加速框架主要集中于降低 GPU 显存峰值和提高 GPU 使用率两大目标。
TensorRT-LLM是 NVIDIA 推出的大语言模型(LLM)推理优化框架。它提供了一组 Python API 用于定义 LLMs,并且使用最新的优化技术将 LLM 模型转换为 TensorRT Engines,推理时直接使用优化后的 TensorRT Engines。

TensorRT-LLM 主要利用以下四项优化技术提升 LLM 模型推理效率。

  1. 量化:模型量化技术是通过降低原始模型的精度来减少模型推理时的 GPU 显存使用。
  2. In-Flight Batching:In-Flight Batching 又名 Continuous Batching 或 iteration-level batching,该技术可以提升推理吞吐率,降低推理时延。Continuous Batching 处理过程如下,当 S3 序列处理完成后插入一个新序列 S5 进行处理,提升资源利用率。详情可参考论文 Orca: A Distributed Serving System for Transformer-Based Generative Models
  3. Attention:Attention 机制用于从序列中提取关键/重要信息,在情感识别、翻译、问答等任务中起着至关重要的作用。Attention 机制按照演进顺序可以分为 MHA(Multi-head Attention)、MQA(Multi-query Attention)[6]以及 GQA(Group-query Attention)[7]机制。MQA 和 GQA 都是 MHA 的变种。
  4. Graph Rewriting:TensorRT-LLM 在将 LLM 模型编译为 TensorRT Engines 时会对神经网络进行优化,提升执行效率。

4.大模型应用

4.1 应用领域

根据输入数据类型的不同,大模型的应用主要分为一下四大类:

语言大模型

主要应用于自然语言处理领域,处理文本数据和理解自然语言。这类模型在大规模语料库上进行训练,学习自然语言的语法、语义和语境规则。例如,OpenAI的GPT系列、Google的Bard、百度的文心一言、阿里的通义千问、华为的盘古、商汤的商量等

视觉大模型

应用于计算机视觉领域,主要用于图像处理和分析。这类模型通过大规模图像数据进行训练,可以实现图像分类、目标检测、图像分割、姿态估计、人脸识别等视觉任务。目前,这个方向的应用尚在发展中。

多模态大模型

能够处理多种类型的数据,如文本、图像和音频等。这类模型结合了NLP和CV的能力,实现对多模态信息的综合理解和分析。例如,OpenAI的Sora、Google的Gemini(Gemma)、华为的悟空画画、Midjourney,Inc.的Midjourney。

自动驾驶

在自动驾驶领域,大模型的概念同样得到了广泛应用。自动驾驶汽车系统中的大模型,具有高参数量和复杂深度学习架构,能够整合多种传感器数据(如摄像头、激光雷达、超声波传感器等),全方位感知和理解周围环境,以实现高级别自动驾驶功能。Tesla在2021年提出了使用Transformer的纯视觉自动驾驶方案,这一方案在2024年已基本实现普及。

4.2 主流产品

当前大模型已经在很多领域开始产品化落地,除了ChatGPT这类大家熟知的产品,主要还有以下一些主流的应用:

在这里插入图片描述
1)办公Copilot类产品:微软首先尝试使用大模型能力来接入旗下的Office系列软件,在Word中可以对文档进行总结并提出修改编辑的建议,也可以对所给的文章进行总结;此前一直头疼Excel各种复杂操作的用户现在也降低了使用门槛,可以直接通过描述就处理数据;PowerPoint中通过对提出要求识别就能自动生成一份展示内容;在Outlook中直接使用自然语言来生成邮件内容等功能,实现真正的AI秘书。
2)Github Copilot类产品:直接通过对话方式进行各种功能代码的生成,包括帮忙写测试用例,解释代码片段和debug程序问题,这个功能对解放程序员生产力取得了革命性的进步,能让开发人员更多的关注到业务理解,系统设计,架构设计等更高级需求的事情上。

3)教育知识类产品:得益于大模型强大的理解以及知识储备,很多公司也嵌入其知识类产品进行应用,比如chatPDF就可以帮助经常看论文的科研人员快速地通过问答的方式进行文章的信息提取,理解以及总结重要内容,大大提升了阅读新论文的效率;对于学习语言的人来说,一款叫Call Annie的软件基本能取代口语老师的角色,并且可以无限时间,随时随地进行口语对话练习。

4)搜索引擎和推荐系统:大模型可以应用于企业的搜索引擎和推荐系统,通过深度学习算法,对用户的搜索意图进行准确理解,提供更精准的搜索结果和个性化的推荐内容。这有助于提升用户体验,增加用户黏性,提高企业的转化率和销售额。

5)公司业务定制化大模型:大模型具有通用性能力,但是在很多零样本的场景的表现依然比不上那个领域正在使用的产品,例如在某些垂直领域,包括工业领域,医药领域,管理领域等场景下进行专业问题,研究型问题的使用依然需要特定场景的数据进行微调,这种定制化的服务也能给企业带来巨大的效率提升和节省成本的收益,属于比较有前景的业务。

6)计算相关上下游相关产业:很多公司正在积极探索基于GPU、FPGA和ASIC等硬件加速制造技术,以支持大模型的训练和推理速度。此外,云计算技术的发展也为大模型的训练提供了更多的计算资源支持,未来科技公司将积极探索基于云计算的分布式训练和推理技术。

除这些外还包括算法优化、隐私和数据安全以及模型可解释性等方面的研究和应用,每天还有很多大模型的应用正在不断涌现,大模型在未来仍然有很大的发展潜力,国内的优秀大模型代表例如百度文心大模型也正在搭建全系统产业化的大模型全景。

5. 大模型的挑战

1.数据安全隐患:一方面大模型训练需要大量的数据支持,但很多数据涉及到机密以及个人隐私问题,如客户信息、交易数据等。需要保证在训练大模型的同时保障数据安全,防止数据泄露和滥用。OpenAI在发布ChatGPT模型的时候用了数月来保证数据安全以及符合人类正常价值观标准。

2.成本高昂:大模型的训练和部署需要大量的计算资源和人力资源,成本非常高昂。对于一些中小型企业而言,难以承担这些成本,也难以获得足够的技术支持和资源。

3.无法保障内容可信:大模型会编造词句,无法保障内容真实可信、有据可查。当前使用者只能根据自己需求去验证生成的内容是否真实可信,很难具有权威说服力。

4.无法实现成本可控:直接训练和部署千亿级参数大模型成本过高,企业级应用应使用百亿级基础模型,根据不同需求训练不同的垂直模型,企业则只需要负担垂直训练成本。但是,如何实现高效的垂直训练,如何控制成本,仍是大模型面临的问题之一。

以上挑战依然有很大空间值得改进,需要进一步研究和探索新的技术和方法。比如可以采用数据加密、隐私保护等技术来保障数据安全;可以通过改进模型架构、优化训练算法、利用分布式计算等方式来提高大模型的效率和性能;此外,还可以通过开源和共享模型资源来降低成本、促进大模型的普及和应用等方式。

参考内容

1.大模型扫盲系列——初识大模型
2.一文帮你了解什么是大模型
3.神经网络算法 - 一文搞懂BERT(基于Transformer的双向编码器)
4.PyTorch造大模型“加速包”,不到1000行代码提速10倍!英伟达科学家:minGPT以来最好的教程式repo之一
5.大语言模型推理提速:TensorRT-LLM 高性能推理实践

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

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

相关文章

【PyTorch】设置CUDA_VISIBLE_DEVICES无效的问题以及多卡使用以及CUDA out of memory问题

方法1: 理想情况下,该环境变量应设置在程序的顶部。如果在设置 torch.backends.cudnn.benchmark 之后调用 CUDA_VISIBLE_DEVICES 变量,则更改 CUDA_VISIBLE_DEVICES 变量将不起作用。 import os os.environ["CUDA_VISIBLE_DEVICES"…

Wpf 使用 Prism 实战开发Day18

数据加载动画实现 概要: 当打开功能页面时,在数据未加载完毕前,希望有一个友好的等待提示。那么,本章通过学习Prism 中事件聚合器(EventAggregator),并通过创建等待提示窗口,同时结…

asp.net core 网页接入微信扫码登录

创建微信开放平台账号&#xff0c;然后创建网页应用 获取appid和appsecret 前端使用的vue&#xff0c;安装插件vue-wxlogin 调用代码 <wxlogin :appid"appId" :scope"scope" :redirect_uri"redirect_uri"></wxlogin> <scri…

日本发现上百例食用功能性标示食品后健康受损案例

据央视新闻&#xff0c;日本消费者厅12日说&#xff0c;受小林制药公司含红曲成分问题保健品事件影响&#xff0c;他们对数千种功能性标示食品实施了紧急检查&#xff0c;发现上百例消费者健康受损案例。 小林制药问题保健品事件曝光后&#xff0c;日本消费者厅对所有备案过的…

(2024,IXC2-4KHD,LVLM,动态图像分割,高分辨率图像处理)InternLM-XComposer2-4KHD

InternLM-XComposer2-4KHD: A Pioneering Large Vision-Language Model Handling Resolutions from 336 Pixels to 4K HD 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 3. 方…

排序算法之快速排序

目录 一、简介二、代码实现三、应用场景 一、简介 算法平均时间复杂度最好时间复杂度最坏时间复杂度空间复杂度排序方式稳定性快速排序O( N N N log ⁡ 2 N \log_{2}N log2​N)O( N N N log ⁡ 2 N \log_{2}N log2​N)O(n^2)O( log ⁡ 2 N \log_{2}N log2​N)In-place不稳定 稳…

llamafactory:unified efficient fine-tuning of 100+ lanuage models

1.introduction llamafactory由三个主要模块组成&#xff0c;Model Loader&#xff0c;Data Worker&#xff0c;Trainer。 2.Efficient fine-tuning techniques 2.1 Efficient Optimization 冻结微调&#xff1a;冻结大部分参数&#xff0c;同时只在一小部分解码器层中微调剩…

算法1: 素数个数统计

统计n以内的素数个数 素数&#xff1a;只能被1和自身整除的自然数&#xff0c;0和1除外&#xff1b; 举例&#xff1a; 输入&#xff1a;100 输出&#xff1a;25 import java.util.*; class Test1{public static void main(String[] args){int a 100; //输入数字//…

Golang教程一(环境搭建,变量,数据类型,数组切片map)

目录 一、环境搭建 1.windows安装 2.linux安装 3.开发工具 二、变量定义与输入输出 1.变量定义 2.全局变量与局部变量 3.定义多个变量 4.常量定义 5.命名规范 6.输出 格式化输出 7.输入 三、基本数据类型 1.整数型 2.浮点型 3.字符型 4.字符串类型 转义字…

Linux/October

October Enumeration Nmap 扫描发现对外开放了22和80端口&#xff0c;使用nmap详细扫描这两个端口 ┌──(kali㉿kali)-[~/vegetable/HTB/October] └─$ nmap -sC -sV -p 22,80 -oA nmap 10.10.10.16 Starting Nmap 7.…

SLA——让你的信息更安全

在单一的静态密码登录验证机制下&#xff0c;非法入侵者若窃听到Windows桌面登录账号的用户名和密码&#xff0c;便可通过合法权限访问内部系统&#xff0c;此时企业信息安全将面临严峻挑战。 企业为了防止账号信息泄露&#xff0c;通常会强制要求员工定期更换登录密码&#x…

java下载网络上的文件、图片保存到本地 FileUtils

java下载网络上的文件、图片保存到本地 FileUtils 1. 引入FileUtils依赖2. 实现代码3. 输出结果 1. 引入FileUtils依赖 <!--FileUtils依赖--> <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency><groupId>commons-io&l…

Linux文本编辑器vim使用和分析—6

目录 1.对vim的简单理解&#xff1a; 2.看待vim的视角&#xff1a; 3.命令模式&#xff1a; 3.1vim被打开后默认的模式&#xff1a; 3.2命令模式切换插入模式&#xff1a; 3.3其他模式回到命令模式&#xff1a; 3.4光标定位&#xff1a; 4.插入模式(编辑模式)&#xff1…

【从浅学到熟知Linux】程序地址空间分布与进程地址空间详谈(含虚拟地址到物理地址的映射)

&#x1f3e0;关于专栏&#xff1a;Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程等内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 程序地址空间概览进程地址空间 程序地址空间概览 我们在执行一个C语言程序时&#xff0c;它包含代码、变量…

【Canvas与艺术】绘制灰白黑鱼鳞纹“Premium Quality”标志

【关键点】 环状鱼鳞纹的制作 【成果图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>灰白黑鱼鳞纹Premium Quality标志&…

Linux ARM平台开发系列讲解(QEMU篇) 1.2 新添加一个Linux kernel设备树

1. 概述 上一章节我们利用QEMU成功启动了Linux kernel,但是细心的小伙伴就会发现,我们用默认的defconfig是没有找到设备树源文件的,但是又发现kernel启动时候它使用了设备树riscv-virtio,qemu,这是因为qemu用了一个默认的设备树文件,该章节呢我们就把这个默认的设备树文件…

12-LINUX--进程间的通信

进程间通信&#xff1a;采用IPC机制&#xff08;进程间的用户空间相互独立&#xff0c;内核空间共享&#xff09;&#xff0c;有管道&#xff0c;信号量&#xff0c;共享内存&#xff0c;消息队列&#xff0c;套接字。 一.管道 管道可以用来在两个进程之间传递数据&#xff0c…

Java8 收集Stream流中的结果

目录 Stream流中的结果到集合中 Stream流中的结果到数组中 对流中数据进行聚合计算 1. 获取最大值 2. 获取最小值 3. 求总和 4. 平均值 5. 统计数量 对流中数据进行分组 对流中数据进行多级分组 对流中数据进行分区 对流中数据进行拼接 Stream流中的结果到集合中 …

Facebook广告投放数据API对接流程

说明&#xff1a;仅供学习使用&#xff0c;请勿用于非法用途&#xff0c;若有侵权&#xff0c;请联系博主删除 作者&#xff1a;zhu6201976 一、需求背景 App在Facebook、Google等巨头进行广告投放&#xff0c;想要拿到实时广告投放效果数据&#xff0c;如曝光、点击、花费、触…

mybatis(5)参数处理+语句查询

参数处理&#xff0b;语句查询 1、简单单个参数2、Map参数3、实体类参数4、多参数5、Param注解6、语句查询6.1 返回一个实体类对象6.2 返回多个实体类对象 List<>6.3 返回一个Map对象6.4 返回多个Map对象 List<Map>6.5 返回一个大Map6.6 结果映射6.6.1 使用resultM…