• [技术干货] 模型并行
    模型并行是分布式计算与深度学习领域的关键技术,核心是将庞大的模型结构拆分为多个独立模块,分配到不同计算单元(GPU、CPU或服务器节点)并行执行,通过模块间的协同通信,完成整体模型的计算任务。它与数据并行相辅相成,专门解决单设备因内存、算力不足,无法承载超大模型训练与推理的痛点,是大语言模型、复杂图像模型落地的核心支撑。与数据并行“同模型、多数据”的思路不同,模型并行遵循“同数据、多模型模块”的逻辑。在超大模型(如千亿、万亿参数模型)训练中,单张GPU的内存无法容纳整个模型的参数,此时模型并行会按层或按功能拆分模型——例如将神经网络的卷积层、池化层分配到节点A,全连接层、输出层分配到节点B,输入相同的数据集后,各节点同步执行对应模块的计算,再通过通信链路传递中间结果,最终输出完整计算结果。模型并行的拆分方式主要分为两种:按层拆分(纵向拆分)和按特征图拆分(横向拆分)。按层拆分简单易实现,适用于层级清晰的模型;按特征图拆分则将同一层的特征图分成多份,分配给不同节点并行计算,能进一步提升单一层级的计算效率,但对节点间的通信延迟要求更高。无论哪种方式,核心都是通过拆分模型,让各计算单元专注于自身负责的模块,充分利用多设备的算力资源。在实际应用中,模型并行已成为大模型落地的必备技术。例如ChatGPT等大语言模型,其参数规模达千亿级别,单设备无法承载,需通过数百甚至数千张GPU组成集群,采用模型并行与数据并行结合的方式,才能完成训练与推理。此外,在自动驾驶、医疗影像分析等领域,复杂模型的参数与计算量巨大,模型并行能有效降低单设备压力,提升计算速度与模型性能。模型并行的核心挑战的是节点间的通信延迟,中间结果的传递会影响整体效率,因此常需搭配高效通信协议与硬件加速。但随着技术发展,模型并行的拆分策略不断优化,与数据并行的融合应用日益成熟,已成为突破单设备算力瓶颈、推动超大模型技术迭代的关键力量,助力人工智能向更复杂、更智能的方向发展。
  • [技术干货] 数据并行
    数据并行是分布式计算领域的核心范式,本质是将大规模数据集拆分成若干独立的小数据块,分配给多个计算单元(如 CPU 核心、GPU 卡、服务器节点)同时处理,最终将各单元的计算结果汇总,完成整体任务。这种 “分而治之” 的思路,解决了单台设备处理海量数据时效率低下、耗时过长的问题,是人工智能训练、大数据分析、科学计算等场景的关键技术支撑。 从实现逻辑来看,数据并行的核心是 “同算法、多数据”。以深度学习训练为例,假设要训练一个图像识别模型,若用单卡 GPU 处理 10000 张图片,需逐一输入模型迭代优化;而数据并行模式下,会将 10000 张图片平均拆成 10 份,分配给 10 张 GPU 卡,每张卡运行相同的模型参数,独立计算 1000 张图片的梯度,再通过梯度同步(如 AllReduce 算法)将所有卡的梯度汇总,更新全局模型参数。这个过程中,所有计算单元执行的是完全相同的算法逻辑,仅处理的数据分片不同,既避免了单节点的性能瓶颈,又保证了计算结果的一致性。 数据并行的优势在数据量和计算量呈指数增长的当下尤为突出:一方面,它能线性提升计算效率 —— 理论上,N 个计算单元并行处理,效率可提升至单单元的 N 倍(排除通信开销);另一方面,它降低了单设备的资源压力,普通服务器集群也能通过数据并行处理 TB 级甚至 PB 级数据。在实际应用中,数据并行已渗透到多个领域:电商平台用它并行分析亿级用户的消费行为,气象机构用它拆分全球气象数据进行气候模拟,自动驾驶企业用它在数百张 GPU 上并行训练路测数据模型。 当然,数据并行也并非无懈可击,节点间的数据传输、梯度同步会产生通信开销,这也是分布式计算优化的核心方向。但不可否认,数据并行以其简单易实现、扩展性强的特点,成为处理海量数据的 “标配方案”,它让原本需要数天完成的计算任务缩短至几小时,是算力突破数据规模限制的关键桥梁。
  • [数据库使用] sql报错 memory is temporarily unavailable
    执行sql报错:memory is temporarily unavailable内存不足报错,在已知报错语句,查看topsql,看到max_peak_memory和min_peak_memory相差较大,一般是有计算倾斜导致,即中间某一结果集,在重重分布时,都落在了一个实例上,导致出现内存不足报错。执行失败,aborted内存有倾斜:倾斜导致下盘也出现倾斜:查看语句执行计划,可以看topsql,可以打印verbose计划。看计划中的streaming做了重分布,大概率是重分布是出现倾斜Streaming(type: SPLIT REDISTRIBUTE dop: 4/5)根据分布键,查表看是否有分布倾斜,                    | 41 |                ->Hash Right Join (42, 45)  (cost=220710.04..290386.88 rows=31168264 width=104)                    |    |                  Hash Cond: ((ods_s4_znadin_main_t.ifavin)::text = (d.body_nr)::text)                    | 42 |                 ->Streaming(type: SPLIT REDISTRIBUTE dop: 6/4)  (cost=0.00..66082.62 rows=4642961 distinct=119407.00 width=75)                    |    |                   Distribute Key: ods_s4_znadin_main_t.ifavin                    | 43 |                  ->Row Adapter  (cost=42337.46..42337.46 rows=4642956 width=75)                    | 44 |                   ->CStore Scan on ods.ods_s4_znadin_main_t  (cost=0.00..42337.46 rows=4642961 width=75)                    |    |                     Distribute Key: ods_s4_znadin_main_t.mandt, ods_s4_znadin_main_t.com_num, ods_s4_znadin_main_t.com_year                    |    |                     Filter: (ods_s4_znadin_main_t.ifavin IS NOT NULL)                    | 45 |                 ->Hash  (cost=204476.57..204476.57 rows=31168260 distinct=2597355.00 width=45)                    | 46 |                  ->Streaming(type: SPLIT REDISTRIBUTE dop: 6/8)  (cost=0.00..204476.57 rows=31168264 width=45)                    |    |                    Distribute Key: d.body_nr                    | 47 |                   ->Row Adapter  (cost=97335.68..97335.68 rows=31168260 width=45)                    | 48 |                    ->CStore Scan on ods.ods_faw_erp_zsdcar_t d  (cost=0.00..97335.68 rows=31168264 width=45)                    |    |                      Distribute Key: d.mandt, d.matnrcar, d.chargcarselect ods_s4_znadin_main_t.ifavin,count(1) from ods.ods_s4_znadin_main_t where (ods_s4_znadin_main_t.ifavin IS NOT NULL) group by 1 order by 2 desc limit 100;过滤了条件:ods_s4_znadin_main_t.ifavin IS NOT NULLselect d.body_nr,count(1) from ods.ods_faw_erp_zsdcar_t d group by 1 order by 2 desc limit 100;但是在重分布过程中,有倾斜。ods_s4_znadin_main_t在ifavin有大量空格,查询时通过(ods_s4_znadin_main_t.ifavin IS NOT NULL)过滤,没有过滤掉空格值;ods.ods_faw_erp_zsdcar_t在body_nr上也有大量空格,查询时也未过滤掉空格;二者join时会在空格上产生大量笛卡尔积,导致计算倾斜,出现内存不足报错。
  • [问题求助] 请问guassdb集群如何跨节点执行命令?
    如题,版本pgsql 9.2.4 gaussdb 8.1.3 分布式集群中经常会遇到杀进程需求,即 SELECT PG_TERMINATE_BACKEND(139834762094352);  但是该命令不能跨节点执行,开发环境只允许为data studio ,比如我开了一个终端窗口,对应的cn为cn_001,要杀死的进程在cn_002,传统方法只能不停的新建终端窗口,直到所在cn为cn_002,才可以执行SELECT PG_TERMINATE_BACKEND(139834762094352); 命令成功。有没有一种办法,让我在cn_001的终端窗口中,也可以杀掉cn_002的进程?  
  • [运维管理] PG_AUTH_HISTORY需要开启那个参数才会记录用户创建密码时间?
    PG_AUTH_HISTORY需要开启那个参数才会记录用户创建密码时间?
  • dws数据库插入数据时如果字段名反引号大写会报错
    表字段名为  locn我们使用工具进行数据插入会给每个字段名都加上``有什么配置可以修改 让 字段名为大写且加了反引号时也插入成功吗
  • [运维管理] DWS jdbc 代码执行sql,连接中断,但是在业务端任务没有停,这种有没有客户端参数能控制超时停止?在连接串中加SocketTimeout参数测了没效果应该是不支持
    DWS jdbc 代码执行sql,连接中断,但是在业务端任务没有停,这种有没有客户端参数能控制超时停止?在连接串中加SocketTimeout参数测了没效果应该是不支持  
  • [SQL] GaussDB(DWS) 手动analyze性能问题小结
    analyze莫名其妙变慢了咋办?将军莫虑,且看此贴~ 直接上干货,常见的analyze慢有这几种情况:    1 . 锁冲突有现场的情况,锁冲突可以用如下语句排查,若对端语句不重要,则可以将对端语句查杀。SELECT * FROM pgxc_lock_conflicts order by xactstart;查杀语句方法,按实际填写实例名和pid:execute direct on (cn_5001) 'select pg_terminate_backend(140026797549312)';通常,手动analyze会持有4级锁,若持锁对端为非8级锁,821.2版本以上,则可以用light模式进行analyze,light的analyze只会持1级锁,这样就不会锁冲突了。analyze (light) 模式名.表名;    2 . 修改过analyze采样率默认情况下,analyze只会采样3万行,但因为对于大表而言,3w行的采样可能不够,导致存在计划跳变的风险,我们可能会调大其采样率,此种情况analyze变慢是预期内的。查询当前默认采样率,正数为default_statistics_target * 300,负数为百分比采样。show default_statistics_target;查询表级设置的采样率,表级采样率会依托于表的某一列上,但会全表生效。SELECT c.oid::regclass::TEXT AS table_name, a.attname, CASE WHEN a.attstattarget > 0 THEN (a.attstattarget * 300)::TEXT WHEN a.attstattarget IS NULL THEN NULL ELSE ((a.attstattarget + 1) * (-1))::TEXT || '%' END AS STATISTICS FROM pg_class c LEFT JOIN pg_attribute a ON c.oid = a.attrelid AND a.attstattarget NOT IN (0, -1) WHERE c.relname IN ('表名') ORDER BY 1, 2;表级还原默认采样率方法:ALTER TABLE 模式名.表名 ALTER 列名 SET STATISTICS 200;    3 . 使用临时表模式采样analyze执行时会分为内存模式和临时表模式,临时表模式会将表的每一列的采样数据插入临时表,并且通过内部生成的sql计算统计信息,临时表模式会比内存模式慢。临时表模式采样日志中会打印:Delete object , calc stats in sample table 关键字通常有三种情况会导致使用临时表模式:① 参数analyze_stats_mode强制指定了sample_table模式show analyze_stats_mode;② 采样率高,且表较大,导致预估内存超过maintenance_work_mem,则会采用临时表模式。如果表大小和采样率都是预期内的,则慢也是预期内的。③ 使用了多列统计信息,对于表中多个列有相关性且查询中有同时基于这些列的条件或分组操作的情况,可尝试收集多列统计信息。但如果收集多列统计信息,analyze会强制走临时表模式。如果业务上没有收集多列统计信息的需求,可以考虑删除。查询多列统计信息:select * from PG_EXT_STATS where schemaname = '模式名' and tablename = '表名';根据查询到的结果删除多列统计信息:ALTER TABLE tablename DELETE STATISTICS ((column_1, column_2));    4 . 环境因素影响集群的cpu和io状况等环境因素,也会影响analyze性能,可以排查当时的性能监控。 参考文献:一文读懂analyze使用【这次高斯不是数学家】更新统计信息 
  • [分享交流] 具身智能技术未来发展趋势如何?
    具身智能技术未来发展趋势如何?
  • [技术干货] 大数据干货合集(2025年12月)
    使用关键词进行查询过滤cid:link_0使用语句归一化特征值进行查询过滤cid:link_5异常熔断应用cid:link_1拦截记录cid:link_6查询过滤器cid:link_7查询过滤规则元数据管理cid:link_8GB18030编码cid:link_9数据库创建最佳实践cid:link_10WeTune产品的项目背景cid:link_11WeTune改写规则的自动挖掘实现cid:link_2WeTune 2.0在华为云GaussDB的落地cid:link_3如何解决引入大量规则之后产生的性能问题cid:link_12WeTune在数据库产业的价值及未来前景cid:link_4增量计算的背景cid:link_13数据库服务API揭秘与实践探索https://bbs.huaweicloud.com/forum/thread-0293202571662365157-1-1.html 
  • [技术干货] 数据库服务API揭秘与实践探索
    API,即应用程序接口,可以看作是一组编程语言的函数和方法,它定义了软件系统中组件之间的交互方式,允许不同的软件之间进行数据通信和功能交互。那么,在什么场景下适合使用API接口,能实现什么效果? 通过API允许用户调用华为云的能力,将华为云的数据和功能集成到用户的数据库管理系统中。 例如,用户在采用华为云数据库服务的同时,亦拥有自建的本地IT管理中心。他们既可利用云上资源,又掌握本地机房设施。在此背景下,用户可通过调用数据库实例查询接口,将数据库资源整合至自身的IT资源管理系统中,从而在一个集成看板上实现对多地IT资源的统一管理。 在快速入门数据库API接口之前,需要了解API接口的组成部分,如请求URL、请求方法、请求消息头和请求消息体;数据库服务API支持两种权限认证方式,分别是Token认证和AK/SK认证;API返回结果则包含状态码、响应消息头和消息体。 数据库服务的API提供了丰富的功能,在功能完备度上与华为云控制台是相同的。这也就意味着,在华为云页面上可以操作的功能,用户通过编程的方式都可以实现自动化控制。我们为每一个API提供了详细的说明,涵盖了鉴权方式、接口约束、请求体样例,响应体样例、错误码详解等,功能包括实例管理、备份管理、日志管理、任务管理等多个模块。
  • [技术干货] 增量计算的背景
    随着数智化时代的到来,数据量不断增长,为了充分挖掘数据价值,实时获取数据动态,GaussDB(DWS)通过与流引擎Flink结合,优化ETL Pipeline,从而数据分析时效实现T+0。 Flink是一款开源的流处理框架,它能够实时处理大规模数据流,并具有高可靠性和高性能的特点。Flink支持流式数据处理、批处理和图形处理等多种计算模式,并提供了丰富的API和工具,可以方便地进行数据处理和分析。GaussDB(DWS)与Flink结合构建下一代Stream Warehouse,实现增量计算,可以为用户提供更加全面、高效的数据处理和分析能力。 为什么需要增量计算能力?增量计算能力解决了哪些场景的痛点问题? 高性能场景 一些需要高性能的典型场景如下: (1) 增量数据的实时ETL并更新物化视图,秒级更新; (2) 数据在仓湖之间实时流动能力; (3) 实时流数据不落盘,直达实时大屏。 数据入库场景 :Kafka的数据直接入湖。
  • [技术干货] WeTune在数据库产业的价值及未来前景
    在数据库测试过程中,对于SQL的优化引擎,可以使用差分测试。差分测试是一种很经典的数据库测试方式,验证重写规则可以使用,验证SQL优化引擎过程中也适用。WeTune等价性验证器可以去枚举语义等价但形式完全不同的两条SQL,这样可以确保在测试对比过程中,程序运行是不一样的路径,可以更高效或覆盖面更广地完成数据库引擎的测试任务。 WeTune不仅减轻了数据库开发者或者DBA的负担,目前在教育领域里有一定的应用,WeTune等价性验证帮助国内外很多高校助教批改学生的数据库作业,减轻数据库教育工作者的工作压力。 华为与高校的深度合作将持续推进,融合双方的技术优势和科研力量,共同探索数据库领域的前沿技术,培养更多高水平的数据库人才。未来,华为和上海交通大学研究团队将携手,共同突破数据库查询重写技术的瓶颈,通过持续的创新和优化,进一步提升GaussDB的查询性能和效率。我们期待更多的技术合作和探索,推动数据库技术向智能化、自动化方向发展,为广大企业和用户带来更多价值。
  • [技术干货] 如何解决引入大量规则之后产生的性能问题
    从客户角度来讲,很多业务其实是相对比较固定的,而且上线之前也提前会做系统测试。若系统里面SQL优化度很高,那么就不必改写规则和暴力枚举,这样就可以降低优化成本。 在实际环境中,大家希望数据库有成千上万条的改写规则可以给用户去用,可以生成改写的SQL语句。但是,改写规则非常多的时候,会导致改写和规则匹配的时间非常长,导致资源的极大浪费,也会影响用户体验。那如何在性能上做加速呢? 目前来讲,主要通过两方面来去解决: 一方面是从通用的匹配算法入手。当改写规则非常多的时候,匹配算法能够帮助性能有数量级的提升; 另一方面,从应用的场景或从SQL产生的源头来进行分类。不同应用场景下、不同业务目的、不同的框架需要的改写规则不一样,WeTune 2.0可以对于不同场景和需求来去做定制化的规则探索。WeTune是多个技术合起来形成了一个规则挖掘。从学术角度来讲,SQL等价性验证可以往数据库测试这个方向再迈一步。
  • [技术干货] WeTune 2.0在华为云GaussDB的落地
    WeTune和现有数据库应用落地过程中,不同的架构会面临不同挑战。WeTune 2.0在华为云GaussDB的落地,从技术角度来讲,GaussDB数据库是System-R架构,它的重写规则是耦合在代码里面,增加或卸载一个规则需要改写查询引擎。把WeTune应用在System-R架构上面涉及到理论、技术、工程层面的一些问题。不过,上海交通大学和华为的积极交流和深入探讨,也为彼此提供了不同的视角。 在数据库开发过程中,改写规则非常依赖人工经验。随着客户场景越来越多,很多规则已经超出了现有的承载能力。从产品开发流程层面上讲,想要在GaussDB里面添加一个新的重写规则,论证重写规则是否等价是非常困难的。但是有了WeTune以后,开发者只要按照形式化语言去描述重写规则,然后WeTune拿去做验证,证明该规则在约束下是等价的,就可以放心地将该重写规则添加到GaussDB中,节约验证时间,对GaussDB的开发等流程非常有帮助。 WeTune从框架上去解决了这两个重写规则是否等价的问题,这是WeTune非常突出的贡献点。对于客户来说,在使用GaussDB进行SQL优化时,只管放心用,优化交给GaussDB;对于开发者来说,只需要关心SQL语义,性能交给GaussDB。 GaussDB引入WeTune2.0以后,自然会产生非常多的规则,帮助用户优化SQL的同时,也引入了另外一个成本,即会产生了SQL优化代价。
总条数:2749 到第 页
上滑加载中