qinfengge
V2EX  ›  Java

如何用 Java 直接调用 Python 模型

  •  
  •   qinfengge · Aug 21, 2023 · 4994 views
    This topic created in 1173 days ago, the information mentioned may be changed or developed.

    首先排除 API 的方式 一种是用 python 导出模型然后用 DJL(deep java Library)直接调用,但需要转译 还有一种是命令行调用,还不如 API 呢

    大佬们还有没有其它方法能够直接调用 python 导出的模型,类似安卓调模型?

    22 replies  •  2023-08-22 16:59:56 +08:00
    ruanimal
    ruanimal
    Aug 21, 2023
    1
    PMML
    qinfengge
    qinfengge
    OP
    Aug 21, 2023
    2
    @ruanimal 简单看了下,如果模型需要的入参是文件,比如图片应该怎么搞?
    ruanimal
    ruanimal
    Aug 21, 2023
    3
    这个得看你具体的模型框架,不太熟这块
    qinfengge
    qinfengge
    OP
    Aug 21, 2023
    4
    @ruanimal #3 好的,感谢😊
    o562dsRcFqYl375i
    o562dsRcFqYl375i
    Aug 21, 2023
    5
    仅供参考:
    1. 相应模型框架的 Java bindings ,将模型直接内嵌到 Java 应用程序中
    2. TF-Serving 、triton server 这类推理服务,Java 和 模型之间走 RESTful 或者 gRPC (某些对框架有要求,比如 TFS )
    3. ONNX 、PMML 这类
    astkaasa
    astkaasa
    Aug 21, 2023
    6
    mark 一下, 可能有需求
    xiaodi666
    xiaodi666
    Aug 21, 2023
    7
    类似于 flink 调 Python 写的算子?
    SimonOne
    SimonOne
    Aug 21, 2023
    8
    @huangzongzhuan #5 你这字咋变色的,也不是代码块啊
    David1119
    David1119
    Aug 21, 2023
    9
    pemja ?
    pannanxu
    pannanxu
    Aug 21, 2023
    10
    以前做过这个。用的是 Runtime.getRuntime().exec()。
    kopnux
    kopnux
    Aug 21, 2023
    11
    用 python 的 web 框架搞 flask django 等
    OysterQAQ
    OysterQAQ
    Aug 21, 2023
    12
    tf 模型就用 TF-Serving (拥有 batch 能力,图模式执行效率高),pytorch 方案很多,尽量找支持 batch 的,要不就自己用 web 实现一个
    zjp
    zjp
    Aug 21, 2023
    13
    用过 PMML ,最后还是选择了 Http 调用
    不用考虑兼容性舒服多了,除了接口定义,两端可以独立开发
    SmileDup
    SmileDup
    Aug 21, 2023
    14
    把最基础的功能(比如 llm 的对话)封装成一个 flask 服务器,暴露一个 restapi ,然后就跟调 api 一样
    dayeye2006199
    dayeye2006199
    Aug 22, 2023 via Android
    15
    Onnx 转译。Java 里面调用 onnxruntime 把模型读进来。
    但是有些算子是不支持的。

    好奇为啥不通过 API 通讯
    jingcjie
    jingcjie
    Aug 22, 2023 via Android❤️1
    16
    折腾过各种,cpp ,tensort ,java ,kotlin ,你只要模型能生成 onnx ( pytorch 和 tf 都可以直接搞),java 爱怎么用怎么用,但现在很多复杂模型导 onnx 很麻烦,要改模型里的操作,甚至重训。
    dcsuibian
    dcsuibian
    Aug 22, 2023 via Android
    17
    grpc
    k1263
    k1263
    Aug 22, 2023
    18
    老 Java JNI ,新 Java FFI
    qinfengge
    qinfengge
    OP
    Aug 22, 2023
    19
    感谢各位大佬,找到了一个 onnx 不错的 demo
    https://gitee.com/agricultureiot/yolo-onnx-java
    Dockerfile
    Dockerfile
    Aug 22, 2023
    20
    用 jni 调
    zhangdahai
    zhangdahai
    Aug 22, 2023
    21
    直接 java
    ZiChun
    ZiChun
    Aug 22, 2023
    22
    如果你的服务器上有 python 环境,那么有个非常方便的方案,什么都不用做。
    ProcessBuilder processBuilder = new ProcessBuilder("/usr/bin/python3.11", "/path/to/python.py");
    try {
    Process process = processBuilder.start();
    try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
    String line;
    while ((line = reader.readLine()) != null) {
    // 你的逻辑
    }
    }
    int exitCode = process.waitFor();
    System.out.println("Exited with error code : " + exitCode);
    } catch (IOException | InterruptedException e) {
    System.err.println("An error occurred while executing the process: " + e.getMessage());
    }
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4903 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 66ms · UTC 08:49 · PVG 16:49 · LAX 00:49 · JFK 03:49
    ♥ Do have faith in what you're doing.