Skip to content

Latest commit

 

History

History
127 lines (69 loc) · 4.56 KB

faq.md

File metadata and controls

127 lines (69 loc) · 4.56 KB

embedx FAQ: 常见问题解答

[TOC]

提问须知

为了让 embedx 的文档更易读,希望用户在提问完,解惑之后,将问题整理到 embedx FAQ 中,以方便后来者使用,感谢各位贡献者。

图类型算法是否支持有向图?

可以支持有向图,但是有向图对比无向图是有损的,以下列举部分问题

  • 基于有向图的随机游走时,下一跳邻居节点如果找不到,会提前返回,导致长度比较短

  • GCN 类模型,使用有向图只聚合以当前节点出发沿有向边得到的邻居节点信息,损失了指向当前节点的所有上游节点信息。

如果 一定要使用有向图 运行,可以使用以下方法:

方法: 给无向边一个非常小的权重,比如 1e-5。

图中有真实边(a b), 权重是 1.0,制造另外一条边(b, a), 权重是 1e-5

使用 random_walk 生成的 sequence 序列长度均为 2

构造图数据的时只生成一个方向的数据,造成随机游走的时候每次游走出第一步就跳出了,找不到下一跳节点,提前返回了。

可以使用以下方法解决:

方法: 检查使用的图数据是否是无向图,无向图要求存在边 a 到 b,也必须存在边 b 到 a。


CPU 使用率只有 100%

embedx 系统的并行度取决于文件的数量,多线程数量等于线程数量和文件数量的最小值,如果文件数量只有 1 个,启动线程数量等于 1。

可以使用以下方法解决:

方法: 通过划分单个文件为多个文件的方式达到加速的效果。文件数量一般建议划分成 100-1000 个。


参数 node feature 和 neighbor feature 的区别是什么?

  • node feature 保存的是节点本身的特征信息,neighbor feature 保存的是聚合(平均)后的邻居特征信息。

  • neighbor feature 用来加速邻居特征聚合类图神经网络算法,通过直接读取提前计算存储好的邻居聚合特征从而避免重复计算。


报错 check failed: 'id_2_name_.find(ns_id) != id_2_name.end()'

  • embedx 要求节点是 uint64 类型,其中前面 16 位存储的是节点的 type,后面 48 位默认是节点本身的信息。

  • embedx 会自动检查节点的前 16 位,可能是输入的图数据中,前 16 位已经被编码了,或者有信息了。

可以使用以下方法解决:

方法: 重新编码,去掉含有信息的编码部分


什么是特征编码?

  • embedx 特征编码方案继承了 deepx_core 里面的特征编码方案,特点是节点空间,速度高效。

  • 具体参考特征编码方案


是否支持模型的增量训练?

支持模型增量训练,训练时候增加使用参数--in_model,输入训练好的模型目录即可加载模型增量训练。


模型输出 embedding 后,node id 是需要再进行解码么?

模型输出的 embedding 是 编码后的节点 对应的 embedding,将 编码后的节点 映射回 原始节点 即可使用。


deepwalk 的 train 和 predict 过程分别是做什么的?

为了所有模型代码结构的统一,每个模型 都有 train 和 predict 过程。 对于 deepwalk 模型,train 指的是模型训练,predict 指的是 dump 节点的 embedding


请问有哪些主要因素影响训练时长?

训练时长主要由模型复杂程度影响,模型越复杂训练速度越慢,需要的训练时长越长,例如 Graphsage 模型设置两层图卷积与设置一层图卷积相比训练速度更慢。

如果是分布式训练场景,rpc 通信I/O分配的机器训练能力 也会有一定影响。


如何预估训练时长?

  • 预估公式
训练时长(s) = 训练轮数 * 训练样本数 / 每秒训练的样本数 / 机器数量
  • 参数介绍

    • 训练轮数指的是参数 --epoch

    • 训练样本数量指的是参数 --in

      • 对于随机游走类的图模型如 deepwalknode2vecunsup_graphsage 等,训练样本数量=节点数量 * 随机游走轮数
    • 每秒训练的样本数 指的是log 中如[src/trainer_context.cc][operator()]:[0] 111 instances/s 中的 111 instances/s

    • 机器数量,单机训练指的是 线程数量, 多机训练指的是 worker 数量


sparse=1 时,model_config 参数如何设置

参考model_config中关于 config 与 sparse 参数介绍。 再次强调下 sparse=1 时,不需要指定节点个数,只需要指定 embedding 维度即可。