在 Elixir 中使用 Pythonx 运行 ML 模型

  • 发现Pythonx,可在与 Elixir 相同的 OS 进程中运行 Python 解释器,还包装了uv以设置包含代码所需 Python 依赖的虚拟环境。
  • 以以下方式运行最近发布的 SmolVLM 模型的 MLX 版本:

    • Mix.install([{:pythonx, "~> 0.3.0"}])
    • Pythonx.uv_init("""...""")
    • Pythonx.eval(...)
    • 使用> elixir smolvlm.exs运行
  • 缓存加载的模型:可先加载模型一次并保存在 Elixir 变量中,多次调用,如:

    • {_, globals} = Pythonx.eval(...)
    • {desc1, _} = Pythonx.eval(...)
    • {desc2, _} = Pythonx.eval(...)
    • IO.inspect(desc1)IO.inspect(desc2)
  • 几乎任何模型都可使用 Python 运行,对于在 Bumblebee 上运行模型有一定难度,Pythonx是在 Elixir 中运行模型的有用方式,可访问整个 Python 生态系统,但有局限性,如 Python 的全局解释器锁(GIL)会阻止多个线程同时执行 Python 代码,若用于集成 Python 需确保在单个 Elixir 进程中或其底层库可处理并发调用,否则更倾向使用 Elixir 的System.cmd/3Ports通过 I/O 管理多个 Python 程序。
阅读 7
0 条评论