LLaMA-Factory/src/llamafactory/hparams/parser.py源码解析

LLaMA-Factory/src/llamafactory/hparams/parser.py源码解析
def _parse_train_args(args: Optional[Dict[str, Any]] = None) -> _TRAIN_CLS:
    parser = HfArgumentParser(_TRAIN_ARGS)
    return _parse_args(parser, args)


def _parse_infer_args(args: Optional[Dict[str, Any]] = None) -> _INFER_CLS:
    parser = HfArgumentParser(_INFER_ARGS)
    return _parse_args(parser, args)


def _parse_eval_args(args: Optional[Dict[str, Any]] = None) -> _EVAL_CLS:
    parser = HfArgumentParser(_EVAL_ARGS)
    return _parse_args(parser, args)


def get_train_args(args: Optional[Dict[str, Any]] = None) -> _TRAIN_CLS:
    model_args, data_args, training_args, finetuning_args, generating_args = _parse_train_args(args)

    # Setup logging
    if training_args.should_log:
        _set_transformers_logging()

    # Check arguments
    if finetuning_args.stage != "pt" and data_args.template is None:
        raise ValueError("Please specify which `template` to use.")

    if finetuning_args.stage != "sft" and training_args.predict_with_generate:
        raise ValueError("`predict_with_generate` cannot be set as True except SFT.")

    if finetuning_args.stage == "sft" and training_args.do_predict and not training_args.predict_with_generate:
        raise ValueError("Please enable `predict_with_generate` to save model predictions.")

逐行解释这段代码:

_parse_train_args 函数

python

复制

def _parse_train_args(args: Optional[Dict[str, Any]] = None) -> _TRAIN_CLS:
    parser = HfArgumentParser(_TRAIN_ARGS)
    return _parse_args(parser, args)
  • 定义了一个名为 _parse_train_args 的函数,用于解析训练参数。
  • 创建一个 HfArgumentParser 对象,传入 _TRAIN_ARGS,它可能是一个包含训练相关参数定义的类或类列表。
  • 调用私有的 _parse_args 函数,传入解析器和可选的参数字典 args,返回解析后的训练参数对象。

_parse_infer_args 函数

python

复制

def _parse_infer_args(args: Optional[Dict[str, Any]] = None) -> _INFER_CLS:
    parser = HfArgumentParser(_INFER_ARGS)
    return _parse_args(parser, args)
  • 定义了一个名为 _parse_infer_args 的函数,用于解析推理参数。
  • 创建一个 HfArgumentParser 对象,传入 _INFER_ARGS,它可能是一个包含推理相关参数定义的类或类列表。
  • 调用私有的 _parse_args 函数,传入解析器和可选的参数字典 args,返回解析后的推理参数对象。

_parse_eval_args 函数

python

复制

def _parse_eval_args(args: Optional[Dict[str, Any]] = None) -> _EVAL_CLS:
    parser = HfArgumentParser(_EVAL_ARGS)
    return _parse_args(parser, args)
  • 定义了一个名为 _parse_eval_args 的函数,用于解析评估参数。
  • 创建一个 HfArgumentParser 对象,传入 _EVAL_ARGS,它可能是一个包含评估相关参数定义的类或类列表。
  • 调用私有的 _parse_args 函数,传入解析器和可选的参数字典 args,返回解析后的评估参数对象。

get_train_args 函数

python

复制

def get_train_args(args: Optional[Dict[str, Any]] = None) -> _TRAIN_CLS:
    model_args, data_args, training_args, finetuning_args, generating_args = _parse_train_args(args)
  • 定义了一个名为 get_train_args 的函数,用于获取训练参数。
  • 调用 _parse_train_args 函数,解析传入的参数字典 args,并将其拆解为 model_argsdata_argstraining_argsfinetuning_argsgenerating_args

˙˙˙˙python

复制

    # Setup logging
    if training_args.should_log:
        _set_transformers_logging()
  • 如果 training_args 中的 should_log 为真,调用 _set_transformers_logging 函数设置日志记录。

python

复制

    # Check arguments
    if finetuning_args.stage != "pt" and data_args.template is None:
        raise ValueError("Please specify which `template` to use.")
  • 检查参数的有效性:
  • 如果微调阶段(stage)不是 "pt"(可能表示预训练),并且 data_args 中没有指定模板(template),则抛出 ValueError

python

复制

    if finetuning_args.stage != "sft" and training_args.predict_with_generate:
        raise ValueError("`predict_with_generate` cannot be set as True except SFT.")
  • 如果微调阶段不是 "sft"(可能表示特定的微调阶段),并且 training_args 中的 predict_with_generate 被设置为真,则抛出 ValueError

python

复制

    if finetuning_args.stage == "sft" and training_args.do_predict and not training_args.predict_with_generate:
        raise ValueError("Please enable `predict_with_generate` to save model predictions.")
  • 如果微调阶段是 "sft",并且 training_args 中的 do_predict 为真,但 predict_with_generate 为假,则抛出 ValueError,要求启用 predict_with_generate 以保存模型预测。

总结

这段代码定义了一些函数,用于解析不同任务(训练、推理、评估)的参数,并进行必要的参数检查。它们使用了 HfArgumentParser 来解析参数定义,并通过 _parse_args 函数来实际解析传入的参数字典。get_train_args 函数还包含了对

Read more

使用 Prometheus 和 Grafana 监控 Spring Boot 应用程序

使用 Prometheus 和 Grafana 监控 Spring Boot 应用程序

手把手教你如何使用 Prometheus 和  监控 Spring Boot 应用程序的过程。 在本文中,我们将研究如何使用 Grafana 监控 Spring Boot 应用程序。我们将研究整个设置并创建一个简单的仪表板来查看一些指标。 部署在生产环境中的每个应用程序都需要某种监控来了解应用程序的执行情况。这将使您了解应用程序是否按方面执行,或者您是否需要采取一些措施以获得所需的性能水平。在现代世界中,这些数据称为应用程序性能指标 (APM)。现在已经有相当多的商业工具如Newrelic、Datadog APM等,都是提供这种能力的SAAS服务。 今天我们将研究两个开源工具,称为Grafana和Prometheus。Prometheus 以时间序列格式收集和存储指标数据,而 Grafana 使用 Prometheus 作为数据源在仪表板上可视化数据。 有了这个,让我们首先创建一个应用程序并使用 Grafana 对其进行监控。 创建一个 Spring Boot 应用程序 让我们访问https://start.spring.io并创建一个具有以下依赖项的简单应用程序。

By Ne0inhk
2022 年值得了解的基础设施即代码工具清单

2022 年值得了解的基础设施即代码工具清单

云计算的出现彻底改变了每个 IT 领域。不排除 IT 基础设施。管理员不得不手动配置资源并管理大型 Excel 表格中的数据的日子已经一去不复返了。在当今动态变化的网络需求下,人工维护 IT 基础设施的想法非常可怕。这就是基础设施即代码工具的用武之地。 简单地说,IaC 是关于使用代码的基础设施自动化。在 IaC 环境中,管理员编写和部署机器可读的配置文件,用于自动配置 IT 基础架构并将基础架构始终保持在所需状态。使用 IaC 配置文件,您可以自动部署网络、虚拟机、服务器、数据库等。 主要分享低代码、微服务、容器化、SAAS‬、系统架构方面的的‬内容‬‬,希望‬大家‬点赞‬,评论,关注‬。 对基础设施即代码工具的需求 最初,IT 管理员手动放置服务器,并在这些服务器上配置和部署应用程序。配置详细信息由网络团队手动存储和管理。这个过程是重复的和耗时的。此外,

By Ne0inhk
Spring经典的面试题,你值得拥有!!

Spring经典的面试题,你值得拥有!!

一、什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。Spring帮助开发者解决了开发中基础性的问题,使得开发人员可以专注于应用程序的开发。 Spring框架本身亦是按照设计模式精心打造,这使得我们可以在开发环境中安心的集成Spring框架,不必担心Spring是如何在后台进行工作的。 Spring框架至今已集成了20多个模块。这些模块主要被分如下图所示的核心容器、数据访问/集成,、Web、AOP(面向切面编程)、工具、消息和测试模块。 二、使用Spring框架能带来哪些好处? 下面列举了一些使用Spring框架带来的主要好处: 1、Dependency Injection(DI) 方法使得构造器和JavaBean properties文件中的依赖关系一目了然。 2、与EJB容器相比较,IoC容器更加趋向于轻量级。这样一来IoC容器在有限的内存和CPU资源的情况下进行应用程序的开发和发布就变得十分有利。 3、Spring并没有闭门造车,Spring利用了已有的技术比如ORM

By Ne0inhk
金三银四面试季,程序员常见的14个Java面试题,必须得收藏!!!

金三银四面试季,程序员常见的14个Java面试题,必须得收藏!!!

跳槽不算频繁,但参加过不少面试(电话面试、face to face面试),面过大/小公司、互联网/传统软件公司,面糊过(眼高手低,缺乏实战经验,挂掉),也面过人,所幸未因失败而气馁,在此过程中不断查缺补漏,养成了踏实、追本溯源、持续改进的习惯,特此将自己经历过、构思过的一些面试题记录下来,如果答案有问题,欢迎拍砖讨论,希望能对找工作或者感兴趣的同学有所帮助,陆续整理中。 1. synchronized和reentrantlock异同 相同点 都实现了多线程同步和内存可见性语义 都是可重入锁 不同点 实现机制不同 synchronized通过java对象头锁标记和Monitor对象实现 reentrantlock通过CAS、ASQ(AbstractQueuedSynchronizer)和locksupport(用于阻塞和解除阻塞)实现 synchronized依赖jvm内存模型保证包含共享变量的多线程内存可见性 reentrantlock通过ASQ的volatile state保证包含共享变量的多线程内存可见性 使用方式不同 synchronized可以修饰实例方法(锁住实例对象

By Ne0inhk