Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >玩转 Spring Boot 集成篇(@Scheduled、静态、动态定时任务)

玩转 Spring Boot 集成篇(@Scheduled、静态、动态定时任务)

作者头像
一猿小讲
发布于 2022-02-25 01:50:15
发布于 2022-02-25 01:50:15
1.4K1141
代码可运行
举报
文章被收录于专栏:一猿小讲一猿小讲
运行总次数:141
代码可运行

研发说:API 请求量到底啥情况呀?统计发粗来(万一访问量一直激增,导致服务宕了,要扣我绩效滴)。

运维说:定期统计一下服务器内存、CPU占用率(万一出故障了,这个锅谁来背?)

业务说:记得把订单支付状态通知一下业务线(我很谨慎,不然都不知道钱支付出去了,妥妥避坑)。

产品说:把每天凌晨 2 点通知用户还款功能简单实现一下(功能很简单,上午实现,下午上线,怎么实现我不管)。

运营说:把每月的业务情况统计粗来(我要向上管理,向上汇报要用到)。

财务说:把账户日末余额统计统计,发个报表粗来(我要去谈费率,为公司节省成本,不然年底就没奖杯可拿啦)。

老板说:每月 15 号发工资,记得把发薪结果统计粗来(我看看到底还能再创(砍)多少辉(人)煌(头))。

很显然,如上需求大概率都需要定时任务来支撑。在日常项目研发中,定时任务可谓是必不可少的一环。本次主要借助 Spring Boot 来谈谈如何实现定时任务。

1. 静态定时任务

所谓静态定时任务是指应用跑起来后,任务的执行时间无法进行动态修改。实现起来也比较简单,只需通过 Spring Boot 内置注解 @Scheduled 来实现,默认是启动单线程来跑任务,可以通过配置线程池开启多线程,下面逐一学习一下。

1.1. 单线程定时任务

1.1.1 开启定时任务功能

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@SpringBootApplication
@EnableScheduling
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
  • @EnableScheduling:用来开启定时任务功能,可以检测 Spring 管理的 bean 上 @Scheduled 的注解,系统默认会自动启动一个线程,来调度执行定时任务。

1.1.2 创建任务类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Component
public class DownLoadTask {

    private static final Log logger = LogFactory.getLog(DownLoadTask.class);

    @Scheduled(cron = "0 0/5 * * * ?")
    public void justDoIt() {
        logger.info("开始下载银行对账文件");
        logger.info("银行对账文件下载完成,进行解密操作");
        logger.info("银行对账文件下载解密完成");
    }
}

@Scheduled:主要用来完成任务的配置,如执行时间、间隔时间、延迟时间等等,其中有如下配置格式,可以自行体验体验。

1.1.3 运行验证

实现了一个每 5 分钟去银行下载一个对账文件的任务,跑起来效果如下。

回头去看,SpringBoot 开启定时任务的确很简单,几行代码就轻松搞定,so easy~。

但是,疑问来了。

疑问:若同时开启两个任务,会存在什么效果呢?若分别下载 A、B 两家银行的对账文件,如何支持呢?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Component
public class DownLoadTask {

    private static final Log logger = LogFactory.getLog(DownLoadTask.class);

    @Scheduled(cron = "0/1 * * * * ?")
    public void justDoItA() {
        logger.info("开始下载银行 A 的对账文件");
        logger.info("银行 A 对账文件下载完成,进行解密操作");
        logger.info("银行 A 对账文件下载解密完成");
    }

    @Scheduled(cron = "0/1 * * * * ?")
    public void justDoItB() {
        logger.info("开始下载银行 B 的对账文件");
        logger.info("银行 B 对账文件下载完成,进行解密操作");
        logger.info("银行 B 对账文件下载解密完成");
    }
}

程序跑起来,效果如下。

很显然,一个线程先办完 A,然后办 B,等上一个事儿办完了才办下一个事儿,不支持多线程。若项目里有多个任务要并行执行,而 Spring Boot 默认单线程来执行任务的方案就差点意思了。

不过无妨,Spring Boot 有开启多线程的方案,接下来看看如何开启多线程来执行任务。

1.2. 多线程定时任务

1.2.1 自定义线程池

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Configuration
public class SchedulerConfig {

    @Bean(name = "bankThreadPool")
    public Executor bankExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        // 设置核心线程数为 3
        executor.setCorePoolSize(3);
        // 最大线程数为10
        executor.setMaxPoolSize(10);
        // 任务队列的大小
        executor.setQueueCapacity(3);
        // 线程前缀名
        executor.setThreadNamePrefix("bankExecutor-");
        // 线程存活时间
        executor.setKeepAliveSeconds(30);
        // 初始化
        executor.initialize();
        return executor;
    }
}
  • @Bean(name = "bankThreadPool"):方法级别上的注解,用来定义实例化线程池,别名为 bankThreadPool。

1.2.2 开启异步执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Component
@EnableAsync
public class DownLoadTask {

    private static final Log logger = LogFactory.getLog(DownLoadTask.class);

    @Async("bankThreadPool")
    @Scheduled(cron = "0/1 * * * * ?")
    public void justDoIt() {
        logger.info("开始下载银行 A 的对账文件");
        logger.info("银行 A 对账文件下载完成,进行解密操作");
        logger.info("银行 A 对账文件下载解密完成");
    }

    @Async("bankThreadPool")
    @Scheduled(cron = "0/1 * * * * ?")
    public void justDoIt2() {
        logger.info("开始下载银行 B 的对账文件");
        logger.info("银行 B 对账文件下载完成,进行解密操作");
        logger.info("银行 B 对账文件下载解密完成");
    }
}
  • @EnableAsync:表示开启对异步任务的支持,就可以使用多线程了。
  • @Async:在方法上加入这个注解,异步执行方法。Spring 会从指定的线程池中获取新线程来执行方法,@Async("name") 会用指定 name 的线程池来处理。

1.2.3 运行验证

显而易见,线程池已生效,多线程执行任务,任务之间相对独立、互不影响。

此时,简单的几行配置代码,足矣满足下载银行对账文件等简易场景的定时任务。

但是,任务执行的时间放在代码里总有种不妥,若因为走了狗屎运想调整一下任务执行的时间,那岂不是要重新改代码,重新发布上线?

疑问来了:如何动态修改任务执行的时间,而无需重新发布重启服务呢?

莫急,继续往下瞅。

2. 动态定时任务

由于 Spring Boot 内置的 @Scheduled 注解无法动态修改任务执行的时间,而实现 SchedulingConfigurer 接口提供了动态修改任务执行时间的可能性。

另外要维护任务执行的时间配置方式有很多种,思想很重要,实现无所谓,则其一便可。

  • 可以放在配置文件里,然后判断文件的修改时间是否发生变化,若变化了则重新读取配置的时间值;
  • 可以放在 Redis 里,然后任务执行的时候获取 Redis 里缓存的定时任务时间值;
  • 可以放在数据库里,然后任务执行的时候根据任务名称获取库中维护的定时任务时间值。(本次采取这个方案)

2.1. 定义任务类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 动态定时任务实现步骤
 * 步骤1:定义定时任务 DownLoadTaskV3 类实现 SchedulingConfigurer 接口;
 * 步骤2:编写定时任务要执行的业务逻辑;
 * 步骤3:数据库中配置任务执行的具体时间规则,记住任务名称
 * 步骤4:根据任务名称从数据库获取 Cron 参数,设置任务触发器,触发任务执行。
 * (仅抛砖引玉,可作进一步的抽象)
 */
@Component
@EnableScheduling
public class DownLoadTaskV3 implements SchedulingConfigurer {

    private static final Log logger = LogFactory.getLog(DownLoadTaskV3.class);

    @Autowired
    private TaskInfoRepository taskInfoRepository;

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        Runnable task = new Runnable() {
            @Override
            public void run() {
                // 步骤2:编写定时任务要执行的业务逻辑(可以进一步抽象)。
                logger.info("V3-开始下载银行 C 的对账文件");
                logger.info("V3-银行 C 对账文件下载完成,进行解密操作");
                logger.info("V3-银行 C 对账文件下载解密完成");
            }
        };
        
        // 步骤 4:根据任务名称从数据库获取 Cron 参数,设置任务触发器,触发任务执行。
        Trigger trigger = new Trigger() {
            /**
             * 每一次任务触发,都会调用一次该方法
             * 然后重新获取下一次的执行时间
             */
            @Override
            public Date nextExecutionTime(TriggerContext triggerContext) {
                // 方式一:执行时间硬编码
                //String cron = "0/1 * * * * ?";

                // 方式二:动态获取执行时间(从数据库、redis 等都可以做任务执行时间的存储管理,本次以数据库为例)
                TaskInfo taskInfo = new TaskInfo();
                // 数据库配置的任务名称,通过任务名称获取对应的任务执行时间
                taskInfo.setJobName("downLoadTaskV3");
                Optional<TaskInfo> taskInfoOptional = taskInfoRepository.findOne(Example.of(taskInfo));
                // 获取配置的任务执行时间 cron 表达式
                String cron = taskInfoOptional.get().getCron();
                CronTrigger trigger = new CronTrigger(cron);
                return trigger.nextExecutionTime(triggerContext);
            }
        };
        // 设置任务触发器,触发任务执行。
        taskRegistrar.addTriggerTask(task, trigger);
    }
}
  • ScheduledTaskRegistrar.addTriggerTask(Runnable task, Trigger trigger):参数 task 中定义执行业务逻辑,在 trigger中进行修改定时任务的执行时间。

2.2. 创建任务信息表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE `SC_TASK_INFO` (
  `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `cron` varchar(32) DEFAULT NULL COMMENT '定时执行',
  `job_name` varchar(256) DEFAULT NULL COMMENT '任务名称',
  `status` char(1) DEFAULT '0' COMMENT '任务开启状态 0-关闭 2-开启',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`)
) COMMENT='定时任务表';

INSERT INTO `SC_TASK_INFO` VALUES ('1', '0/10 * * * * ?', 'downLoadTaskV3', '2', '2020-03-01 16:43:50', '2020-06-11 11:06:09');

本次只用到了表中的 cron(定时表达式)、job_name(任务名称)两个字段,其它字段后续集成 Quartz 才会用到,可先忽略。

2.3. 创建实体类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Entity
@Table(name = "sc_task_info")
public class TaskInfo implements Serializable {
    @Id
    private Integer id;
    @Column
    private String cron;
    @Column
    private String jobName;
    @Column
    private String status;
    @Column
    private Date createTime;
    @Column
    private Date updateTime;
    
    // 提供 setter/getter 方法
}

2.4. 定义持久化接口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface TaskInfoRepository extends JpaRepository<TaskInfo, Integer> {
}

2.5. 引入依赖以及相关配置

主要是完成从数据库查询指定任务名称对应的定时配置,实现方式会有很多种,不要局限于本文提及的 JPA,可参考历史分享《玩转 Spring Boot 集成篇(MyBatis、JPA、事务支持)》引入 JPA、数据库连接依赖以及 application.properties 完成数据库连接配置。

2.6. 运行验证

库中对于 downLoadTaskV3 任务默认配置的时间为每 10 秒执行一次。

控制台输出如下。

手动修改数据库,把任务执行的时间表达式修改为每 1 秒执行一次。

控制台输出效果如下,很显然已经生效了。

至此,定时任务的时间就可以动态修改生效了,若再实现一个页面进行修改任务执行时间的值,其实也挺爽。

这种方案其实可以称为是简易版的 Quartz,在一定程度上也能解决一定的业务场景问题,但是若做更复杂的动作,例如启停任务、删除任务等等操作,实现起来则稍显复杂,此时便可以通过集成 Quartz 等开源任务框架来实现,而鉴于集成 Quartz 框架的动态管理任务代码较多咱们下一篇再分享。

3. 例行回顾

本文是 Spring Boot 项目集成定时任务首篇讲解,主要分享了如下部分:

  • Spring Boot 内置注解实现静态定时任务;
  • 提了一嘴四种任务时间配置格式;
  • 分享了如何开启多线程跑任务?
  • 尝试实现了动态定时任务。

玩转 Spring Boot 集成定时任务首篇就写到这里,下次一起集成 Quratz 框架并实现任务动态管理。

历史系列文章:

玩转 Spring Boot 入门篇 玩转 Spring Boot 集成篇(MySQL、Druid、HikariCP) 玩转 Spring Boot 集成篇(MyBatis、JPA、事务支持) 玩转 Spring Boot 集成篇(Redis) 玩转 Spring Boot 集成篇(Actuator、Spring Boot Admin) 玩转 Spring Boot 集成篇(RabbitMQ)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一猿小讲 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
# 访问蓝色通道 blue_channel = img[:, :, 0] # 修改红色通道 img[:, :, 2] = 0 up主你好 我是初学者,这里应该是注释写错了 ,
# 访问蓝色通道 blue_channel = img[:, :, 0] # 修改红色通道 img[:, :, 2] = 0 up主你好 我是初学者,这里应该是注释写错了 ,
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
使用PyTorch实现混合专家(MoE)模型
Mixtral 8x7B 的推出在开放 AI 领域引发了广泛关注,特别是混合专家(Mixture-of-Experts:MoEs)这一概念被大家所认知。混合专家(MoE)概念是协作智能的象征,体现了“整体大于部分之和”的说法。MoE模型汇集了各种专家模型的优势,以提供更好的预测。它是围绕一个门控网络和一组专家网络构建的,每个专家网络都擅长特定任务的不同方面
deephub
2024/01/10
1.6K0
使用PyTorch实现混合专家(MoE)模型
手把手教你,从零开始实现一个稀疏混合专家架构语言模型(MoE)
在混合专家模型 Mixtral 发布后,混合专家模型(MoE)越来越受到人们的关注。在稀疏化的混合专家语言模型中,大部分组件都与传统的 transformers 相同。然而,尽管看似简单,但经验表明,稀疏混合专家语言模型训练的稳定性还存在着一些问题。
机器之心
2024/02/26
1.8K0
手把手教你,从零开始实现一个稀疏混合专家架构语言模型(MoE)
从DeepSeek-V3的成功,看MoE混合专家网络对深度学习算法领域的影响(MoE代码级实战)
📷 一、引言 经历了大模型2024一整年度的兵荒马乱,从年初的Sora文生视频到MiniMax顿悟后的开源,要说年度最大赢家,当属deepseek莫属:年中
LDG_AGI
2025/01/21
1910
从DeepSeek-V3的成功,看MoE混合专家网络对深度学习算法领域的影响(MoE代码级实战)
DeepSeek v3 的 MoE 模型架构与激活参数解析
在人工智能和深度学习的研究中,模型的规模和架构决定了它的能力与潜力。本文将深入探讨 DeepSeek v3 这一模型的独特之处——其被描述为一个拥有 671B 参数的 MoE(Mixture of Experts)模型,其中 37B 参数在推理过程中被激活。这一表述对于许多新接触这一领域的人来说可能显得晦涩难懂,但通过逐步解析和实际案例的对比,能帮助更好地理解这一模型的结构与工作原理。
编程小妖女
2025/01/12
1.9K0
DeepSeek v3 的 MoE 模型架构与激活参数解析
[DeepSeek]-DeepSeek技术解析:MoE架构实现与代码实战
以下是一篇结合DeepSeek技术解析与代码示例的技术文章,重点展示其核心算法实现与落地应用:
远方2.0
2025/03/15
5320
[DeepSeek]-DeepSeek技术解析:MoE架构实现与代码实战
【深度学习】多目标融合算法(四):多门混合专家网络MMOE(Multi-gate Mixture-of-Experts)
上一篇我们讲了MoE混合专家网络,通过引入Gate门控,针对不同的Input分布,对多个专家网络赋予不同的权重,解决多场景或多目标任务task的底层信息共享及个性化问题。但MoE网络对于不同的Expert专家网络,采用同一个Gate门控网络,仅对不同的Input分布实现了个性化,对不同目标任务task的个性化刻画能力不足,今天在MoE的基础上,引入MMoE网络,为每一个task任务构建专属的Gate门控网络,这样的改进可以针对不同的task得到不同的Experts权重,从而实现对Experts专家的选择利用,不同的任务task对应的gate门控网络可以学习到不同的Experts网络组合模式,更容易捕捉到不容task间的相关性和差异性。
LDG_AGI
2025/02/11
3110
【深度学习】多目标融合算法(四):多门混合专家网络MMOE(Multi-gate Mixture-of-Experts)
[AI学习笔记]DeepSeek混合专家系统(MoE)架构深度解析
在人工智能和机器学习领域,模型架构的设计对于任务性能至关重要。随着数据规模和模型复杂度的不断增长,传统的单一专家模型在处理大规模、多样化的任务时逐渐暴露出局限性。为了突破这一瓶颈,混合专家系统(Mixture of Experts,MoE)应运而生。DeepSeek作为基于MoE架构的先进系统,在处理复杂任务时展现出了卓越的性能和灵活性,为人工智能技术的发展和应用开辟了新的道路。
数字扫地僧
2025/03/17
9990
[DeepSeek]解析DeepSeek的技术内核:混合专家架构如何重塑AI效能
在当今大型语言模型(LLM)竞争激烈的赛道上,中国AI企业DeepSeek凭借其独特的技术路线脱颖而出。其核心优势之一,便是对混合专家(Mixture of Experts,简称MoE)架构的创新应用,这一技术选择不仅重塑了AI模型的效能表现,更为行业带来了全新的思考方向。本文将深入解析DeepSeek如何通过MoE架构实现算力与性能的最优平衡。
远方2.0
2025/03/27
1910
[DeepSeek]解析DeepSeek的技术内核:混合专家架构如何重塑AI效能
多任务学习模型MMoE详解 Multi-gate Mixture-of-Experts 与代码实现
在线上推荐预测任务时往往需要预测用户的多个行为,如关注、点赞、停留时间等,从而调整策略进行权衡。其中涉及到多任务学习,本篇将会大概整理一些常用的模型如MMoE, ESMM, SNR方便理解与学习。
大鹅
2021/06/09
15.3K0
Mixture-of-Experts:大语言模型的多路专家架构详解
在现代深度学习领域,尤其是大规模语言模型的研究中,Mixture-of-Experts(简称 MoE)是一种高效的模型架构设计。其核心思想是通过一组独立的“专家”(子模型)来协同完成任务,并根据输入数据动态地选择其中少数几个专家进行计算。这种方式有效地提升了模型的表达能力,同时显著降低了计算开销。
编程小妖女
2025/01/11
2660
Mixture-of-Experts:大语言模型的多路专家架构详解
MOE怎样划分不同专家
- **随机划分**:将FFN中的神经元随机地均匀划分为多个子集,每个子集独立组成一个专家。例如在LLaMA-MoE模型的构建中,采用**非重叠随机拆分法**,将FFN层中的中间神经元均匀分割成**多个子集,每个子集对应一个专家网络**。
zhangjiqun
2025/01/06
1990
[AI学习笔记]深度动态路由演进:DeepSeek门控网络设计全解析
DeepSeek的门控网络设计主要体现在其MoE架构中,动态路由通过门控机制决定输入token被路由到哪些专家网络。
数字扫地僧
2025/03/18
4480
[AI学习笔记]深度动态路由演进:DeepSeek门控网络设计全解析
【深度学习】多目标融合算法(六):渐进式分层提取模型PLE(Progressive Layered Extraction)
上一篇我们讲了PLE的前置模型CGC(Customized Gate Control)定制门控网络,核心思想是在MMoE基础上,为每一个任务tower定制独享专家,使用任务独享专家与共享专家共同决定任务Tower的输入,相比于MMoE仅用Gate门控表征任务Tower的方法,CGC引入独享专家,对任务表征更加全面,又通过共享专家保证关联性。
LDG_AGI
2025/05/22
1350
【深度学习】多目标融合算法(六):渐进式分层提取模型PLE(Progressive Layered Extraction)
[AI学习笔记]神经网络架构演进:从MLP到DeepSeek的混合专家系统(详细教程)
在人工智能的发展历程中,神经网络架构不断演进,从早期的多层感知器(MLP)逐步发展到如今复杂且强大的混合专家系统,如DeepSeek。每一次架构的变革都为AI的能力带来了质的飞跃,深刻影响着各领域的应用。
不吃香菜AI
2025/03/15
3380
[AI学习笔记]神经网络架构演进:从MLP到DeepSeek的混合专家系统(详细教程)
深度解析DeepSeek核心机制:从模型架构到应用场景
随着大规模语言模型(LLM)的崛起,DeepSeek作为一款具备卓越性能的AI模型,在代码生成、文本理解、对话交互等多个领域展现了强大能力。本文将深入解析DeepSeek的核心机制,包括其模型架构、训练策略、推理优化及其在实际应用中的表现,并通过代码示例展示其强大之处。
江南清风起
2025/03/14
6150
深度解析DeepSeek核心机制:从模型架构到应用场景
大模型系列之解读MoE
Mixtral 8x7B 的推出, 使我们开始更多地关注 基于MoE 的大模型架构, 那么,什么是MoE呢?
半吊子全栈工匠
2024/05/07
1.6K0
大模型系列之解读MoE
DeepSeek:开启AI联动与模型微调的无限可能
文章摘要:DeepSeek 是一家由中国知名量化私募巨头幻方量化创立的人工智能公司,成立于 2023 年 7 月。其技术基石主要包括混合专家架构(MoE)、强化学习与奖励工程以及知识蒸馏技术等。2023 年至今,DeepSeek 陆续推出了多个大语言模型,如 DeepSeek Coder、DeepSeek LLM、DeepSeek-V2、DeepSeek-V3 和 DeepSeek-R1,在不同场景下展现出强大的性能和高度的优化平衡。
正在走向自律
2025/03/04
5050
DeepSeek:开启AI联动与模型微调的无限可能
如何使用神经网络模型解决分类、聚类、回归和标注任务:基于 PyTorch 的实现与分析
文章链接:https://cloud.tencent.com/developer/article/2469162
小馒头学Python
2024/11/22
6530
如何使用神经网络模型解决分类、聚类、回归和标注任务:基于 PyTorch 的实现与分析
深度学习算法中的递归神经网络(Recursive Neural Networks)
深度学习算法是当今人工智能领域的热门话题,其在图像识别、自然语言处理等领域取得了令人瞩目的成果。递归神经网络(Recursive Neural Networks,简称RNN)作为深度学习算法中的一种重要变种,具有强大的建模能力,广泛应用于自然语言处理、计算机视觉等任务中。
大盘鸡拌面
2023/09/25
1K0
一文带你搞懂图神经网络GNN
先说一下今天用到的数据集,虽然之前有文章讲过,但是这次可以讲的更透彻一些,温故而知新嘛:
Tom2Code
2024/07/19
2990
一文带你搞懂图神经网络GNN
推荐阅读
使用PyTorch实现混合专家(MoE)模型
1.6K0
手把手教你,从零开始实现一个稀疏混合专家架构语言模型(MoE)
1.8K0
从DeepSeek-V3的成功,看MoE混合专家网络对深度学习算法领域的影响(MoE代码级实战)
1910
DeepSeek v3 的 MoE 模型架构与激活参数解析
1.9K0
[DeepSeek]-DeepSeek技术解析:MoE架构实现与代码实战
5320
【深度学习】多目标融合算法(四):多门混合专家网络MMOE(Multi-gate Mixture-of-Experts)
3110
[AI学习笔记]DeepSeek混合专家系统(MoE)架构深度解析
9990
[DeepSeek]解析DeepSeek的技术内核:混合专家架构如何重塑AI效能
1910
多任务学习模型MMoE详解 Multi-gate Mixture-of-Experts 与代码实现
15.3K0
Mixture-of-Experts:大语言模型的多路专家架构详解
2660
MOE怎样划分不同专家
1990
[AI学习笔记]深度动态路由演进:DeepSeek门控网络设计全解析
4480
【深度学习】多目标融合算法(六):渐进式分层提取模型PLE(Progressive Layered Extraction)
1350
[AI学习笔记]神经网络架构演进:从MLP到DeepSeek的混合专家系统(详细教程)
3380
深度解析DeepSeek核心机制:从模型架构到应用场景
6150
大模型系列之解读MoE
1.6K0
DeepSeek:开启AI联动与模型微调的无限可能
5050
如何使用神经网络模型解决分类、聚类、回归和标注任务:基于 PyTorch 的实现与分析
6530
深度学习算法中的递归神经网络(Recursive Neural Networks)
1K0
一文带你搞懂图神经网络GNN
2990
相关推荐
使用PyTorch实现混合专家(MoE)模型
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验