V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qinfengge
V2EX  ›  Java

如何用 Java 直接调用 Python 模型

  •  
  •   qinfengge · 250 天前 · 2908 次点击
    这是一个创建于 250 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    好奇为啥不通过 API 通讯
    jingcjie
        16
    jingcjie  
       249 天前 via Android   ❤️ 1
    折腾过各种,cpp ,tensort ,java ,kotlin ,你只要模型能生成 onnx ( pytorch 和 tf 都可以直接搞),java 爱怎么用怎么用,但现在很多复杂模型导 onnx 很麻烦,要改模型里的操作,甚至重训。
    dcsuibian
        17
    dcsuibian  
       249 天前 via Android
    grpc
    k1263
        18
    k1263  
       249 天前
    老 Java JNI ,新 Java FFI
    qinfengge
        19
    qinfengge  
    OP
       249 天前
    感谢各位大佬,找到了一个 onnx 不错的 demo
    https://gitee.com/agricultureiot/yolo-onnx-java
    Jwyt
        20
    Jwyt  
       249 天前
    用 jni 调
    zhangdahai
        21
    zhangdahai  
       249 天前
    直接 java
    ZiChun
        22
    ZiChun  
       249 天前
    如果你的服务器上有 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());
    }
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2749 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:24 · PVG 18:24 · LAX 03:24 · JFK 06:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.