EDA工具开发中的调参方法

news2025/2/24 11:10:52

一:问题提出

在开发EDA工具时,涉及到复杂算法的每个Flow,有很多的参数需要设定默认值。默认值和算法有关,不同默认值效果大不相同。并且,对于不同目标,默认值的设置也不相同。如果参数很多,很难通过经验进行默认值的设定。这类似一个多参数模型调优的问题。

问题:当我们遇到一个多参数的模型时,不同参数导致不同的后果,在可以通过打分确认好坏的情况下,如何选择最优的参数(获得更好的得分)。

二:传统方案

对于多个参数的搜索,随着参数个数增多,会产生组合爆炸,是一个NP-Hard问题。

传统的做法就是 网格搜索和随机搜索.

所谓grid search 就是 穷举法,相当于是暴力破解,当然代价巨大。

random search 是随机挑选一些参数,这就有点撞大运了,没法保证拿到最优解,大概率会错过最优解。

三:贝叶斯参数调优方案及原理

好了,上面问题的解法是使用贝叶斯优化,那我们先看看它的工作原理:

3.1:概率模型

首先,贝叶斯模型是基于概率的,如下图:A已发生的条件下B发生的概率。

3.2:学习先验,决定新点

在贝叶斯优化中,“模型”是一个概率模型,通常是高斯过程。当我们想优化一个函数(例如,机器学习模型的性能)但不知道它的确切形状时,我们可以使用贝叶斯优化。每次尝试都会为我们提供新的信息,帮助我们更好地理解这个函数,并指导我们在下一次应该在哪里尝试,以期望得到最好的结果。

        贝叶斯优化的工作原理是:首先对目标函数的全局行为建立先验知识(通常用高斯过程来表示),然后通过观察目标函数在不同输入点的输出,更新这个先验知识,形成后验分布。基于后验分布,选择下一个采样点,这个选择既要考虑到之前观察到的最优值(即利用),又要考虑到全局尚未探索的区域(即探索)。这个选择的策略通常由所谓的采集函数(Acquisition Function)来定义,比如最常用的期望提升(Expected Improvement),这样,贝叶斯优化不仅可以有效地搜索超参数空间,还能根据已有的知识来引导搜索,避免了大量的无用尝试。

        可以先不管先验后验这些难以理解的概念,简单的把贝叶斯优化理解为:贝叶斯优化利用已经观察到的点来决定下一步需要探索的点。如此,反复的迭代,直到找到最优(算法能找到的,不一定是全局最优点,也可能是局部最优。本文后续也采用此说法)的超参数。而如何决定下一步需要探索的点就有探索和利用这两种需要权衡的策略。

3.3:利用和探索

        对于平均值大的是可利用的点,方差大的是值得探索的点.

        如上原则,可选出下一步要尝试的点。减少尝试次数,尽快拿到最优解。

3.4:其它问题

        如果参数量过大,参数之间存在依赖…… 

四:实现方案

        首先,有开源的项目可用,不需要自已重写基础代码。

        开源项目:https://scikit-optimize.github.io/stable/

        这是一个Python的开源项目,详情可自行查看。

五:工程化示例 

        如果要把开源工具集成到实际项目中使用,还需要做一些工作。我们以EDA中Route过程的参数调优为例,来看一下工程化的步骤。

        demo.sh 是运行模型(EDA工具中实际调用的程序)

        demo.csv:这是指行的score结果(各种QoR指标)

        main.py是主程序,优化器的所有参数在此设置。

        Adapter.py  主要是要重写score()方法,确定评分规则。

        Paras.json 是涉及的参数列表,包括每个参数的取值范围

        最主要的参数定义,大多数是高级参数,需要深入理解。

比较常用的就是:

        优化器运行次数,这个和参数个数相关。

输出的结果类似如下:

选取score最高的参数组合。

可以查看不同参数的收敛情况:

如上图,可以看到,当尝试到第8次时,已经基本找到了最大值 ,说明很快找到了最优解。

但是,我们考虑一下,如果参数比较多,会怎么样?

那一定会非常的慢,还有,如果参数与参数之间的相关性很小,但放到一起来分析,那是没有必要的,所以,我们需要评估图,来评估参数之间的影响度。

评估图如下:

当然,这里的例子,参数太少,没啥意义。

主要是通过评估图,查看多个参数之间的相互影响度。将影响不大的,可以分开,变成多组参数,分多次来分析。

评估图还有一些别的用途,我也没研究清楚。后续再说。

六:高级问题

        上面的工具,要简单使用,是很好用的。但是如果参数超出10个或者超过20个,实际上就需要做参数的分类,确定出哪些参数对于性能的影响大,哪些影响小(分为主要参数和次要参数)。

        另外,在多维空间中,我们通过评估图,可以找到大至的一个最优区域,这样,关键参数就可以减小取值范围,然后再对次数参数进行优化。这种解藕,可以简化搜索空间。相当于分层的贝叶斯优化方法,可以保证更加快速的到到最佳组合,最大化我们的计算资源的利用率。

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

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

相关文章

京东运营数据分析:2023年中秋大闸蟹市场销售数据分析

双节也带不动大闸蟹市场? 早在放假前,各界消息都称今年是大闸蟹的丰收年。一方面,今年受到台风影响较少,整体气温适合大闸蟹生长;另一方面,蟹苗选育手段也在不断精进。因此今年大闸蟹产量预计会有明显提升…

让你的相册变成私有云!Synology Photos 的公网访问功能指南

文章目录 前言本教程解决的问题是:按照本教程操作完成能够达到的效果是:1.在群晖中下载并安装Synology Photos套件2.设置共享文件夹3.添加您想共享的照片4.cpolar搭建隧道5.公网ip地址访问您的分享相册6.移动端app使用公网上传照片并及时分享 前言 很多…

C#之常见图形文件格式及其特点

部分内容来源于Microsoft相关文档! 日常生活中和软件开发中,经常会用到图形文件格式: BMP BMP 是 Windows 用来存储与设备无关的图像和与应用程序无关的图像的标准格式。 给定 BMP 文件的每像素位数(1、4、8、15、24、32 或 64…

RBF神经网络案例——客户流失率预测

目录 背景介绍 1、径向基神经网络结构 2、符号说明 3、计算网络输出 4、计算能量函数 网络学习步骤 步骤1、先将能量函数E写成各参数的复合函数结构 步骤2、求E关于各参数的偏导 步骤3、求各参数的调整量 步骤4、计算各参数的调整量 5、按照步骤1-步骤4编写RBF神经网络…

day34

今日内容概要 本周主题内容:网络编程和并发编程,理论较多、实践相对少,需要记忆的较多 软件开发架构 OSI七层协议(互联网通信协议) 网络层 传输层 tcp协议和udp协议、IP协议、以太网协议等 tcp协议的三次握手和四次挥手 今日内容详细…

安装Zookeeper

ZooKeeper是一个开源的分布式协调服务,它主要用于解决分布式系统中的一致性、可靠性和协调性等问题。 选择版本 去archive.apache.org/dist/zookeeper/,选择Zookeeper版本,我选择3.4.6 上传服务器 复制地址,通过wget下载 wget…

云渲染一张效果图要多长时间?什么影响了云渲染的速度?

在当今数字化时代,云渲染已成为许多设计和创意行业中不可或缺的关键工具。它不仅能够提高渲染效率,还为艺术家和设计师带来更多创作的机会和可能性。对于许多尚未使用过云渲染的朋友们来说,你们可能会有一个共同的问题&#xff1…

工业数据采集分析系统 自动化工厂与MES的中转站

MES系统是一套面向制造企业车间执行层的生产信息化管理系统。MES可以为企业提供包括制造数据管理、计划排程管理、生产调度管理、库存管理、质量管理、人力资源管理、工作中心/设备管理、工具工装管理、采购管理、成本管理、项目看板管理、生产过程控制、底层数据集成分析、上层…

C#关于接口的常见面试问题

1.1 关于C#接口的问题以及与抽象类的异同 什么是接口 继承有几种形式 为什么要使用接口? 接口类型可以用public关键字修饰吗? 接口能不能派生于抽象类? 接口能不能用Sealed修饰? 一个类可以继承多个接口吗? 必…

Android通过BluetoothDevice获取蓝牙地址

在Android中提供了BluetoothAdapter和BluetoothDevice两个类来实现对蓝牙设备的操作。那么我们要想获取蓝牙地址,可以通过以下步骤来实现 目录 1.获取BluetoothAdapter的实例 2.检查设备是否支持蓝牙 3.打开蓝牙 4.获取已配对的蓝牙设备列表 5.查找特定的蓝牙…

基于知识图谱建模、全文检索的智能知识管理库(源码)

一、项目介绍 一款全源码,可二开,可基于云部署、私有部署的企业级知识库云平台,一款让企业知识变为实打实的数字财富的系统,应用在需要进行文档整理、分类、归集、检索、分析的场景。 知识图谱提供了一种从海量文本和图像中抽取结…

软件测试基础知识详解

1、软件测试定义 软件测试是指在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。 2、软件的分类 软件 程序 数据 文档。 按照功能划分: 系统软件:如操作系统…

(转)tinymce-vue使用教程

一、资源下载 npm install tinymce -S //当前版本^5.1.1 npm install tinymce/tinymce-vue -S //当前版本^3.0.1二、安装语言包 资源下载后,在 node_modules 中找到 tinymce/skins 目录,然后将 skins 目录拷贝到 static 目录下,(PS: 如果是使用 vue-cli 3.x 构建…

内部类概述

一、内部类 1.内部类概述 2.内部类的四种实现形式 1.成员内部类 public class Outer {private int age99;public static String a;//成员内部类public class Inner{private int age88;private String name; // public static String school; //jdk 16开始才支持定义静态…

Mysql按照中文首字母排序

Mysql按照中文首字母排序 1、utf8_general_ci 编码2、latin1_swedish_ci 编码3、gbk 编码 数据库中可以设定表的编码格式,不同编码格式下,中文的排序有区别,下面分别介绍常用编码下的排序方法。 1、utf8_general_ci 编码 如果数据表的某字段…

纯Python代码超快速实现简易贪吃蛇小游戏-打发时间神器

当经典游戏遇上Python——体验十分钟构建自己的休闲娱乐贪吃蛇小游戏! 话不多说,直接上源码,复制粘贴即可完美运行!(如果你已经安装了pygame库) import pygame import time import randompygame.init()# 定义颜色 white (255, …

每日一练 | 华为认证真题练习Day119

1、如图所示的网络,管理员希望所有主机都不能访问Web服务(端口号为80)其它服务正常访问,则在G0/0/1的接口配置中traffic-filter outbound 需要绑定哪个ACL规则? A. acl number 3001 rule 5 deny udp destination-port…

基于 python 的接口自动化测试,简单易上手

一、简介 本文从一个简单的登录接口测试入手,一步步调整优化接口调用姿势; 然后简单讨论了一下接口测试框架的要点; 最后介绍了一下我们目前正在使用的接口测试框架 pithy。 期望读者可以通过本文对接口自动化测试有一个大致的了解。 二、引言…

C语言达到什么水平才能从事单片机工作

C语言达到什么水平才能从事单片机工作 从事单片机工作需要具备一定的C语言编程水平。以下是几个关键要点:基本C语言知识: 掌握C语言的基本语法、数据类型、运算符、流控制语句和函数等基本概念。最近很多小伙伴找我,说想要一些C语言学习资料&…

Jmeter连接mysql数据库详细步骤

一、一般平常工作中使用jmeter 连接数据库的作用 主要包括: 1、本身对数据库进行测试(功能、性能测试)时会需要使用jmeter连接数据库 2、功能测试时,测试出来的结果需要和数据库中的数据进行对比是否正确一致。这时候可以通过j…