解析是指 protobuf 二进制文件。这协议和 json 不一样,数据类型并不是 1 对 1 的。 比如一个 Length-delimited 类型,int 是 2 ,同时对应多个子类型。可以是嵌入式 messages ,可以是 utf8 文本字符串,也可以是纯 bytes 数组。 现在写了一个解析器,是什么类型,要纯粹靠猜。先尝试 utf8 ,不行再退回到嵌入式 messages ,解析一次。如果还是不行,就默认为 bytes 数组。 总觉得很不靠谱的样子,在没有 proto 辅助的前提下,如何才能优雅的转为 json? proto, 解析, bytes, JSON
在用 protobuf ,这玩意儿难道不是自动生成序列化和反序列化代码然后再也不改的? 还是你解析的是别人的 protobuf 消息不知道真实格式?这当然只能猜了,多整点数据排除所有错误答案才能得出结果,
@AoEiuV020JP 我在用微软 ai 推理模型,用的是 protobuf 格式。 pb 本身是序列化格式没错,但是大部分模型推导的结构都比较松散,而且 onnx 里面的 layers 复杂度比较高。会夹杂各种没遇到过的 operators 。用库不太方便,一些 OP 会变。 复杂度一高,代码就会变复杂。就希望能写一个稍微通用一点的转换工具了,化简 AI 推导流程。
@stamhe AI 模型和通讯协议不一样,并没有 proto 文本数据。 就只给一个模型 pb 二进制文件,我要反推内部的输入参数,把 input/output 对接上才行。 每个模型权重输入,每个版本都不太一样。
@thinkershare 这个开源工具可以解析任意 proto 生成的二进制文件,不需要原始格式 https://protobuf-decoder.netlify.app/ 这工具用起来没问题,但是我去看源代码实现方式,核心功能是依靠 try catch 实现的,说白了就是靠猜,这就很尴尬了。