如何将ONNX模型转为十六进制字符串/.hex格式用于Azure Synapse SQL预测
将ONNX文件转换为十六进制字符串并在Azure Synapse中用SQL执行预测的步骤
一、本地把ONNX文件转成十六进制字符串
你可以用两种常用工具完成转换:
方法1:PowerShell(Windows环境)
打开PowerShell,切换到Model.onnx所在的目录,执行以下命令:
Get-Content -Path "Model.onnx" -Encoding Byte | ForEach-Object { $_.ToString("X2") } | Out-File -FilePath "model_hex.txt" -Encoding ASCII
执行后会生成一个model_hex.txt文件,里面就是连续的十六进制字符串(每个字节对应两位十六进制字符,无空格或分隔符)。
方法2:Python(跨平台)
如果用Python,运行以下脚本:
with open("Model.onnx", "rb") as input_file: # 读取二进制文件并转为十六进制字符串 hex_content = input_file.read().hex() with open("model_hex.txt", "w") as output_file: output_file.write(hex_content)
同样会得到包含十六进制字符串的文本文件。
二、把十六进制字符串存入Azure Synapse的表中
首先创建一个用于存储模型的表(如果还没有的话):
CREATE TABLE dbo.ONNXModels ( ModelID INT PRIMARY KEY, ModelHexString VARCHAR(MAX) NOT NULL, ModelName NVARCHAR(100) NOT NULL )
接着打开model_hex.txt,复制里面的十六进制字符串,用INSERT语句插入表中:
INSERT INTO dbo.ONNXModels (ModelID, ModelHexString, ModelName) VALUES (1, '替换成你的十六进制字符串内容', 'MyPredictionModel')
三、用SQL执行预测操作
在Synapse中,需要先把十六进制字符串转回二进制格式,再用PREDICT函数调用模型。假设你的输入数据存在dbo.InputFeatures表中,执行以下SQL:
SELECT * FROM PREDICT( -- 将十六进制字符串转为二进制模型 MODEL = (SELECT CONVERT(VARBINARY(MAX), ModelHexString, 2) FROM dbo.ONNXModels WHERE ModelID = 1), -- 指定输入数据来源 DATA = dbo.InputFeatures ) AS PredictionOutput
说明:
CONVERT函数的第三个参数2表示输入的十六进制字符串没有0x前缀,如果你的字符串带0x,把参数改成1即可。
四、关键注意事项
- 确保ONNX模型的输入输出列名、数据类型和你的输入表
dbo.InputFeatures完全匹配,否则会出现预测失败。 - 若模型体积较大,
VARCHAR(MAX)足够存储(Synapse中最大支持2GB),无需担心长度问题。 - 测试阶段可以先用小型ONNX模型验证整个流程,确认转换和预测都正常后再用正式模型。
内容的提问来源于stack exchange,提问作者llgx 10
相关产品推荐
相关产品推荐

