每个算法工程师都应该了解的流行超参数调优技术。 作者:Sivasai Yadav Mudugandla 编译:McGL ? 引言 维基百科上说“超参数优化(optimization)或调优(tuning)是为学习算法选择一组最优超参数的问题” 机器学习工作流中最难的部分之一是为模型寻找最佳的超参数。 Dr.Mukesh Rao的超参数样本清单 目录 1. 传统或手动调参 2. 网格搜索 3. 随机搜索 4. 贝叶斯搜索 1. 传统或手动调参 在传统的调优中,我们通过手动检查随机超参数集来训练算法,并选择最适合我们目标的参数集。 它类似于手动调优,为网格中指定的所有给定超参数值的每个排列建立模型,并评估和选择最佳模型。
作者丨Sivasai Yadav Mudugandla 编辑丨Python遇见机器学习 引言 维基百科上说“超参数优化(optimization)或调优(tuning)是为学习算法选择一组最优超参数的问题 机器学习模型的性能与超参数直接相关。超参数调优越多,得到的模型就越好。调整超参数真的很难又乏味,更是一门艺术而不是科学。 Dr.Mukesh Rao的超参数样本清单 目录 1. 传统或手动调参 2. 网格搜索 3. 随机搜索 4. 贝叶斯搜索 1. 传统或手动调参 在传统的调优中,我们通过手动检查随机超参数集来训练算法,并选择最适合我们目标的参数集。 它类似于手动调优,为网格中指定的所有给定超参数值的每个排列建立模型,并评估和选择最佳模型。
版本支持的参数。 本文讲解最近关于在参与hive往spark迁移过程中遇到的一些参数相关问题的调优。 内容分为两部分,第一部分讲遇到异常,从而需要通过设置参数来解决的调优;第二部分讲用于提升性能而进行的调优。 异常调优 spark.sql.hive.convertMetastoreParquet parquet是一种列式存储格式,可以用于spark-sql 和hive 的存储格式。 性能调优 除了遇到异常需要被动调整参数之外,我们还可以主动调整参数从而对性能进行调优。 spark.sql.files.opencostInBytes 该参数默认4M,表示小于4M的小文件会合并到一个分区中,用于减小小文件,防止太多单个小文件占一个分区情况。
用于实时查看和调整 JVM 进程参数。 jcmd JVM 命令行调试 工具。 用法: jstat [option] VMID [interval] [count] option 参数: -class: 监视类装载、卸载数量、总空间以及类装载所耗费的时间 -gc:监视 Java 堆状况 Thread Stack Size -Xss: —线程堆栈大小,一般用于存放方法入口参数和返回值,以及原子类型的本地变量,一般可设置为128k. 如果线程数较多,函数的递归较少,线程栈内存可以调小节约内存,默认1M MetaSpace/PermGen jdk1.8以下设置永久代大小: -XX:PermSize: 永久代初始大小 -XX:MaxPermSize (离线环境压测可以打开这两个参数) 参考资料 JVM对外内存完全解读
hive.exec.max.dynamic.partitions=1000 (4)在每个执行MR的节点上,最大可以创建多少个动态分区。该参数需要根据实际的数据来设定。 比如:源数据中包含了一年的数据,即day字段有365个值,那么该参数就需要设置成大于365,如果使用默认值100,则会报错。 click_url string) PARTITIONED BY (p_time STRING) row format delimited fields terminated by '\t'; (4) mapred.map.tasks.speculative.execution=false; SET mapred.reduce.tasks.speculative.execution=false; 九、Hive调优配置项合集 join的map数控制,默认是10000; hive.skewjoin.mapjoin.min.split 数据倾斜join时map join的map任务的最小split大小,默认是33554432,该参数要结合上面的参数共同使用来进行细粒度的控制
本教程以hadoop 为例,根据自己的实际情况调整ulimit 限制 liunx 内核网络参数调整 在linux 中所有的TCP/IP 参数都位于/proc/sys/net 目录下(请注意,对/proc 4088000 net.ipv4.tcp_keepalive_time = 1800 net.ipv4.tcp_keepalive_intvl = 30 net.ipv4.tcp_keepalive_probes = 3 net.ipv4.tcp_sack = 1 net.ipv4.tcp_fack = 1 net.ipv4.tcp_timestamps = 1 net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_fin_timeout = 30 net.ipv4.ip_local_port_range = 1024 65000 HDFS 参数优化 image.png Hbase 参数优化 RPC 参数优化 hbase.regionserver.handler.count
【前言】 前面几篇文章讲述了rabbitmq消息存储的相关原理,也提到了有些参数可以进行配置。这些配置参数的微调在不同的场景中会有不同的效果。 默认值是4096(字节),即小于4KB的消息会嵌入到消息索引中一并存储。 注:4KB包括消息内容以及消息的属性等元数据信息,其中消息的元数据信息占用至少300字节。 【参数调优】 queue_index_max_journal_entries 先来看一组测试数据 测试场景是这样的: 16个生产者分别向64个持久化队列不间断发送消息,队列设置为lazy模式;每条消息大小为 【总结】 本文总结了几个调优相关的参数,也在特定场景下对其进行了测试说明。 此外,erlang层面还会有一些参数可以微调,因此不同场景下还需要结合实际需要进行参数的调优。
用于实时查看和调整 JVM 进程参数。 jcmd JVM 命令行调试 工具。 用法: jstat [option] VMID [interval] [count] option 参数: -class: 监视类装载、卸载数量、总空间以及类装载所耗费的时间 -gc:监视 Java 堆状况 Thread Stack Size -Xss: —线程堆栈大小,一般用于存放方法入口参数和返回值,以及原子类型的本地变量,一般可设置为128k. 如果线程数较多,函数的递归较少,线程栈内存可以调小节约内存,默认1M MetaSpace/PermGen jdk1.8以下设置永久代大小: -XX:PermSize: 永久代初始大小 -XX:MaxPermSize (离线环境压测可以打开这两个参数) 参考资料 JVM对外内存完全解读
文章目录 总体架构 主要的组件 执行过程 tomcat 调优 内存优化 并发优化 缓存优化 IO优化 开启线程池 添加Listener 组件优化 APR Tomcat Native 配置 性能测试(工具 article/details/79134451](https://blog.csdn.net/cc_xp/article/details/79134451) 总体架构 主要的组件 执行过程 tomcat 调优 bin/catalina.bat set JAVA_OPTS=-server -XX:PermSize=512M -XX:MaxPermSize=1024m -Xms2048m -Xmx2048m 参数介绍 调后的配置 参数说明 maxThreads 客户请求最大线程数 minSpareThreads Tomcat初始化时创建的 socket 线程数 maxSpareThreads Tomcat 开启线程池 配置 参数说明 name:线程池名称,用于 Connector中指定。
再来看看linux内核常用的参数优化: Linux内核参数优化可以根据不同的应用场景进行调整,以提高系统性能和稳定性。 以下是一些常见的Linux内核参数优化: 文件系统缓存参数:文件系统缓存是Linux系统中的重要性能因素之一,可以通过调整以下参数进行优化: vm.dirty_background_ratio:设置脏页 这里附上一个调优的脚本,我来简单翻译一下: 地址: https://github.com/nyist-mirror/kernel_tuning # ! "16777216" > /proc/sys/net/core/wmem_max Echo "16777216" > /proc/sys/net/core/wmem_default 设置Linux自动调优 net/ipv6/conf/all/disable_ipv6 Echo "1" > /proc/sys/net/ipv6/conf/default/disable_ipv6 # ####文件系统调优 增加系统文件描述符限制
调优基本概念 在调整JVM性能时,通常有三个组件需要考虑: 堆大小调整 垃圾收集器调整 JIT编译器 大多数调优选项都与调整堆大小和选择合适的垃圾收集器有关,JIT编译器对性能也有很大影响,但很少需要对其进行调优 垃圾收集器Parallel参数调优 Parallel垃圾收集器在JDK8中是JVM默认的垃圾收集器,它是以吞吐量优先的垃圾收集器。其可调节的参数如下: ? 垃圾收集器G1参数调优 G1收集器是一个兼顾吞吐量和响应时间的收集器,如果是大堆(如堆的大小超过6GB),堆的使用率超过50%,GC延迟要求稳定且可预测的低于0.5秒,建议使用G1收集器。 ? GC调优之前,我们需要了解当前JVM参数的信息。 调整-XX:ParallelGCThreads的值可以指定GC并发的线程数,如在JVM启动参数中可以添加 “-Xmx1024m -XX:ParallelGCThreads=4”,调节GC并发的线程数,
echo 3 > /proc/sys/vm/drop_caches 确实有点效果但不治根 查看一下tomcat占用资源情况(mem空间占用了87.9%) 需要对tomcat的JVM参数进行优化一下 LINUX中调优tomcat-----路径:安装路径下/bin/catalina.sh vim catalina.sh 在 cygwin=false 之上添加所需要配置的内存大小 JAVA_OPTS
需要对tomcat的JVM参数进行优化一下 LINUX中调优tomcat—–路径:安装路径下/bin/catalina.sh vim catalina.sh 在 cygwin=false 之上添加所需要配置的内存大小
这时,有必要调整下Linux的TCP内核参数,让系统更快的释放TIME_WAIT连接。 依然是往上面的参数文件中,加入下面配置: net.ipv4.tcp_keepalive_time= 1200 #当keepalive起用时,TCP发送keepalive消息的频度。 此项参数可控制TIME_WAIT 最大数量。 这几个参数,建议在流量非常大的服务器上开启,会有显著效果。一般的流量小的服务器上,没必要去设这几个参数。 内核其他TCP参数说明: net.ipv4.tcp_max_syn_backlog= 65536 #记录尚未收到客户端确认信息的连接请求的最大值。 net.ipv4.tcp_fin_timeout= 30 #如果套接字由本端要求关闭,这个参数决定它保持在FIN-WAIT-2状态的时间。对端可出错并永不关闭连接,甚至意外当机。缺省值是60秒。
内存调优 设置heap大小 这个非常重要,通常只要这里设置够了,就不会出现溢出。 -Xms4096m -Xmx4096m or -Xms4g -Xmx4g 这两个值的大小应该一样,这样减少转换时初始化时间 64位一般可支持的最大内存是多少? 设置code cache -XX:ReservedCodeCacheSize=1024m -XX:+UseCompressedOops 设置字符串压缩 -XX:-CompactStrings GC调优 并发GC线程设置 服务器总的线程数/jvm实例数就行了,如果一台服务器上有4个jvm。 比如2颗6核超线程(超线程后1个核相当于2个线程)就是24/4=6调,置ParallelGCThreads时最大不要超过6就行了。
10000 * hard nproc 10000 #重新打开session就可以生效 修改sysctl.conf文件 vim /etc/sysctl.conf #新增下面几行 net.ipv4.
JVM参数说明 Xms 是指设定程序启动时占用内存大小。一般来讲,大点,程序会启动的快一点,但是也可能会导致机器暂时间变慢 Xmx 是指设定程序运行期间最大可占用的内存大小。 默认情况下,JDK5.0以前都是使用串行收集器,如果想使用其他收集器需要在启动时加入相应参数。 可能会影响性能,但是可以消除碎片 3、辅助信息 JVM提供了大量命令行参数,打印信息,供调试使用。 调优总结 年轻代大小的选择 1、响应时间优先的应用 :尽可能设大,直到接近系统的最低响应时间限制 (根据实际情况选择)。在此种情况下,年轻代收集发生的频率也是最小的。同时,减少到达年老代的对象。 因为对响应时间没有要求,垃圾收集可以并行进行,一般适合8CPU以上的应用 年老代大小的选择 1、响应时间优先的应用 :年老代使用并发收集器,所以其大小需要小心设置,一般要考虑并发会话率 和会话持续时间 等一些参数
4.控制并行度 项目中,由于标签的周期性有两种,分别是日标签与月标签,分别对应hdfs上的日宽表与月宽表。同时选中多个日与月标签进行客户群探索时,SQL会出现多个join的情况。 参数spark.shuffle.memoryFraction spark应用程序在所申请的内存资源中可用于shuffle的比例 SQL级别的优化: 1.优化sql结构 传统的行式存储数据库在经过 至此,将从数据仓库中挖掘出的数据源表中的浮点型数据类型统一改为double数据类型,最终生成的parquet格式的宽表在hdfs上节省的空间为json格式的3倍,前台对标签宽表的关联查询也提高了4倍。
HDFS参数调优hdfs-site.xml dfs.namenode.handler.count=20 * log2(Cluster Size),比如集群规模为8台时,即20*8的对数,此参数设置为60 对于大集群或者有大量客户端的集群来说,通常需要增大参数dfs.namenode.handler.count的默认值10。 YARN参数调优yarn-site.xml (1)情景描述:总共7台机器,每天几亿条数据,数据源->Flume->Kafka->HDFS->Hive 面临问题:数据统计主要用HiveSQL,没有数据倾斜 调节这两个参数能提高系统内存的利用率。 [HDFS配置文件参数设置的优先级] hdfs-site.xml是HDFS的配置文件,其中包含了各种对HDFS集群的设置参数,比如集群中存储文件副本的数量,namenode辅助节点的地址等。
用法: vim /etc/sysctl.conf #修改内容 sysctl -p #生效 相关参数仅供参考,具体数值还需要根据机器性能,应用场景等实际情况来做更细微调整。 net.core.netdev_max_backlog = 400000 #该参数决定了,网络设备接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。 net.ipv4.tcp_fin_timeout = 10 #表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。 net.ipv4.tcp_rmem #与 tcp_wmem 类似,不过它表示的是为自动调优所使用的接收缓冲区的值。 net.ipv4.tcp_wmem = 30000000 30000000 30000000 #为自动调优定义每个 socket 使用的内存。