跳转到主要内容

一个用于在Web上暴露切割器CLI的Girder插件

项目描述

一个用于通过Docker和girder_worker在Web上暴露切割器执行模型CLI的Girder插件。

安装

Slicer CLI Web既是Girder插件,也是Girder Worker插件。它允许从Girder用户界面运行容器化任务。

Linux

在Linux上,Python 3.6、3.7、3.8、3.9或3.10

先决条件

  • 必须安装适当版本的Python。

  • 必须安装并运行MongoDB。

  • 需要RabbitMQ或其他代理来使用Girder Worker。

  • 必须安装Docker,当前用户必须是docker组的一部分。

要使用Girder

pip install girder-slicer-cli-web[girder]
girder build
girder serve

要使用Girder Worker

pip install girder-slicer-cli-web[worker]
GW_DIRECT_PATHS=true girder_worker -l info -Ofair --prefetch-multiplier=1

第一次启动Girder时,您需要至少配置一个用户和一个assetstore(请参阅Girder文档)。此外,建议您安装一些容器化任务,例如HistomicsTK算法。这可以通过访问管理员控制台、插件、Slicer CLI Web设置来完成。设置默认任务上传文件夹,然后导入dsarchive/histomicstk:latest Docker镜像。

Girder插件

导入Docker镜像

当在Girder中安装时,管理员用户可以前往管理控制台 -> 插件 -> Slicer CLI Web以添加Docker镜像。选择一个Docker镜像和一个现有文件夹,然后选择导入镜像。如果Girder机器上没有Docker镜像,Slicer CLI Web将拉取该Docker镜像。

对于每个导入的Docker镜像,将创建一个以镜像标签命名的文件夹。在此文件夹内,将创建一个以镜像版本命名的子文件夹。该子文件夹将根据Docker镜像报告的每个CLI包含一个项目。这些项目在导入后可以像标准Girder项目一样移动。

运行CLIs

当您访问导入的CLI的项目页面时,将显示一个额外的配置任务部分。您可以设置CLI的所有输入并指定输出文件应存储的位置。选择运行任务后,Girder Worker将执行CLI。查看作业面板以获取进度和错误消息。

Docker CLIs

Slicer CLI Web从Docker镜像中执行程序。任何符合其ENTRYPOINT基本响应的Docker镜像都可以使用。

具体来说,当以以下方式调用docker镜像时:

docker run <docker image tag> --list_cli

它需要响应一个包含CLIs的JSON字典,其中字典的键是CLI的名称。有关示例,请参阅cli_list.json

每个可用的CLI都需要报告其输入和输出。当以以下方式调用docker镜像时:

docker run <docker image tag> <cli name> --xml

它需要返回一个XML规范到stdout。有关示例,请参阅Example1.xml

XML必须符合Slicer执行模式,略有增加。

  • 某些类型(imagefiletransformgeometrytabledirectoryitem)可以有reference属性。当使用Girder的imagefileitemdirectory时,如果reference属性是_girder_id_,则值将以Girder ID字符串的形式传递,而不是转换为Girder资源。

  • region类型可以有coordinateSystem属性。

  • 区域类型有一个可选的 shapes 属性,该属性是一个以逗号分隔的值列表,可以包括 defaultrectangle(矩形)、polygon(多边形)、line(线)、polyline(多段线)、point(点),以及 multi 和其中一个 submit(或 submitoff)、submitonautosubmit。在官方模式中,区域是一个由六个值组成的向量,形式为 x,y,z,rx,ry,rz,它定义了一个基于三个维度中心点和半径的矩形。这是默认形状。矩形形状允许一个由四个值组成的向量定义一个矩形,形式为 x,y,width,height,其中 x,y 是矩形的左上角在像素坐标中的位置。许多接受此值的算法接受 -1,-1,-1,-1 作为默认值,以指定整个概念空间。多边形形状允许一个 x,y 值的列表。多边形必须始终有至少四个点,这样值向量就不会与默认值混淆;重复第一个顶点以指定三角形。线形状允许一个两点线。为了区分它与矩形,在线后添加了 -2,-2 的值。多段线形状允许一个多顶点线,再次由线后的 -2,-2 值指示。一个点是一个单独的顶点。multi 允许多个形状,通过用 -1,-1 分隔每个形状的坐标来指示。请注意,形状内不允许使用 -1,-1 或 -2,-2 作为坐标——要使用这些值,请用小数指定它们(例如,-1.0,-1.0)。提交选项将添加有关如何处理更改的建议。如果存在,应存在在设置有效形状后立即自动运行作业的选项。autosubmit 表示这应该始终发生。submitsubmitoff 提供此设置,但默认不提交作业。submiton 提供此设置,默认提交作业。

  • 某些输入类型(imagefileitemdirectory)可以具有 defaultNameMatchdefaultPathMatchdefaultRelativePath 属性。前两个是正则表达式,旨在为 UI 提供一个值来匹配,从而从与正则表达式匹配的文件或路径中预填充默认值。defaultNameMatch 旨在匹配最终路径元素,而 defaultPathMatch 则用于整个路径作为一个组合字符串。defaultRelativePath 用于查找相对于某个基值的值。在 Girder UI 中,这可能是从一个项中。

  • 输入类型可以具有一个datalist属性。如果存在这个属性,当CLI首次加载或可能在参数更改后定期,CLI可能会带有可选参数。CLI预计将返回一个以换行符分隔的值列表,这些值可以用作推荐输入。例如,一个字符串输入可能有一个datalist--enumerate-options;CLI将会带有现有参数加上由datalist指定的额外参数。如果结果是合理的,输入控制会向用户展示这个列表。这个datalist属性是一个json编码的字典,它覆盖了其他参数。这应该覆盖那些不需要解析为产生datalist的参数(例如,输入和输出文件),因为这将加快调用速度。CLI应该对修改后的调用返回一个包含多个<element>some text</element>值的响应,这些值将成为控件的建议数据。

  • 有一些特殊的字符串参数,如果未指定或为空,则会自动填充。名为girderApiUrlgirderToken的字符串参数会被填充适当的URL和令牌,以便运行中的工作可以借助girder_client与Girder通信。

  • 内部,使用的是ctk_cli模块。这有两个与Slicer执行模式不同的地方,从技术上讲是错误。

    • 枚举在适当的父标签下有裸元素。也就是说,不像这样的结构<string-enumeration>...<enumeration><element>Value 1</element><element>Value 2</element>...</enumeration></string-enumeration>,省略了<enumeration>标签:<string-enumeration>...<element>Value 1</element><element>Value 2</element>...</string-enumeration>

    • 布尔值在标志或长标志后指定一个真或假值。Slicer执行模式表明布尔值默认为假,标志的存在应使它们为真。ctk_cli指定它们接受一个单独的truefalse参数。这不会改变xml;它改变传递给CLI的内容。不是传递--longflag来设置标志为真,而是必须传递--longflag true

支持GPU的Docker CLI

当girder_worker运行Docker镜像时,只有当Docker镜像有一个标签表示它应该使用nvidia驱动程序时(将LABEL com.nvidia.volumes.needed=nvidia_driver添加到Dockerfile中),容器才会启动以支持GPU。

–list_cli响应格式

使用--list_cli选项调用的Docker镜像的响应需要是一个JSON响应,返回一个单一的对象。对象必须包含每个CLI的一个键。每个键都有一个用于解析或处理CLI的值。

以下是一个带注释的示例

{
  // the key is the name of the CLI
  "Example1": {
    // type is typically either "python" or "cxx".  The default program
    // either runs "python <CLI key>/<CLI key>.py" for python or
    // "<CLI key>/<CLI key>" for cxx.
    "type": "python"
  },
  "Example2": {
    "type": "python",
    // The desc-type defaults to xml but can be any of "xml", "json", or
    // "yaml".  To get the CLI command line options, the CLI is invoked via
    //   docker run <docker image tag> <cli name> --<desc-type>
    "desc-type": "json"
  },
  "AnotherName": {
    // The alias allows the CLI to be invoked as either the key or the
    // alias.  This runs Example2 when invoked as AnotherName.
    "alias": "Example2",
    "type": "python"
  },
  "Example3": {
    "type": "python",
    // docker-params is a dictionary of parameters passed to the docker API
    // when the docker container is created and run.  Not all possible tags
    // are passed through.  See the docker python module for options:
    // https://docker-py.readthedocs.io/en/stable/containers.html
    "docker-params": {
      "ipc_mode": "host"
    }
  }
}

CLI端点

每个暴露的CLI都通过REST路径 slicer_cli_web/<docker 镜像标签和 版本>/<cli 命令>/runslicer_cli_web/<内部项目 ID>/run 添加为端点,其中 <docker 镜像标签和版本> 是包含斜杠、冒号和井号的组合标签和版本,用下划线替换。所有命令行参数都可以作为端点查询参数传递。输入项目、文件夹和文件通过它们的Girder ID指定。输入图像通过Girder文件ID指定。输出文件通过名称和具有相同名称的关联参数指定,并带有Girder文件夹ID的 _folder 后缀。

小型示例CLI Docker

可以通过 docker build --force-rm -t girder/slicer_cli_web:small . 在本地构建小型示例CLI Docker镜像,或者从Docker Hub拉取。

批量处理

所有接受单个项目、图像或文件作为输入的CLI都可以在单个目录中的一组此类资源上运行。对于非批量处理,图像、项目或文件的ID传递给 <param>。对于批量处理,文件夹的ID传递给 <param>_folder,并将正则表达式传递给 <param>。处理该文件夹中所有名称与正则表达式匹配的项。对于图像,仅考虑包含 large_images 的项。对于文件,使用每个考虑项中的第一个文件。

如果两个输入有批量规范,则文件夹ID确定的每个项目列表与正则表达式确定的列表之间必须有一个一对一的对应关系。所有列表都按小写项目名称排序。

在运行批量作业时,父作业将启动普通(非批量)作业。只有在最新的子作业不再等待启动时,父作业才会启动另一个子作业。这允许非批量作业或多个批量作业的子作业自然交织。可以取消父作业,这将停止它安排任何更多子作业。

模板输入

任何接受值不是Girder资源标识符的CLI参数都可以用Jinja2风格的模板字符串指定。

例如,而不是键入显式的输出文件名,可以指定类似 {{title}}-{{reference_base}}-{{now}}{{extension}} 的内容。如果这在一个名为“Radial Blur”的任务上对一个名为“SampleImage.tiff”的图像上运行,并且输出图像引用了图像,并且有一个以“ .png”开头的文件扩展名列表,这将转换为值 Radial Blur-SampleImage-20210428-084321.png

以下模板值对所有参数处理方式相同

  • {{title}}:显示的CLI任务标题。

  • {{task}}:内部任务名称(这通常不包含空格)

  • {{image}}:用于任务的Docker镜像标签

  • {{now}}:作业开始时的本地时间,格式为 yyyymmdd-HHMMSS。您可以使用 yyyymmddHHMMSS 分别表示四位数年份、两位数月份、日期、24小时制小时、分钟和秒。

  • {{parameter_<cli parameter 名称>}}:任何未模板化的参数都可以通过其名称引用。例如,在本存储库中的小型-docker CLI的Example1中,{{parameter_stringChoice}} 将替换为传递给stringChoice参数的值。

  • {{parameter_<name of cli parameter>_base}} 与前一个条目相同,除非参数的最右侧部分看起来像文件扩展名,这时会将其移除。这可以用来获取文件参数的基本名称。

以下模板参数仅在Web客户端处理:- {#control:<selector>#}:如果指定了参数的值,则使用DOM中选中字段的值。例如,{#control:.h-zoom-value#} 可以获取当前图像的缩放级别。

还有针对个别参数的特定模板值

  • {{name}}:此参数的名称。这通常不包含任何空格。

  • {{label}}:该参数的标签。这是在用户界面中显示的内容。

  • {{description}}:参数的描述。

  • {{index}}:如果有的话,参数的索引。

  • {{default}}:如果有的话,参数的默认值。

  • {{extension}}:如果有的话,参数 fileExtension 值的第一个条目。

  • {{reference}}:如果参数引用了另一个参数,则返回该参数的值。它与 {{parameter_<reference>}} 等效。

  • {{reference_base}}:之前提到的引用值,去除了最右侧的文件扩展名。

如果本地(服务器)环境有任何以 SLICER_CLI_WEB_ 开头的环境变量,这些变量可以在模板中以 {{env_(name)}} 的形式访问。例如,SLICER_CLI_WEB_DASK_SERVER 可以作为 {{env_DASK_SERVER}} 访问。

项目详情


发布历史 发布通知 | RSS源

下载文件

下载您平台对应的文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。

源代码发行版

girder_slicer_cli_web-1.5.9.tar.gz (127.1 kB 查看哈希值)

上传时间 源代码

构建发行版

girder_slicer_cli_web-1.5.9-py2.py3-none-any.whl (98.8 kB 查看哈希值)

上传于 Python 2 Python 3

由以下支持