跳到内容


模块设置文件

模块的安装、启动和管理方式在该模块的 modulesettings.json 文件(或文件)中定义。您可以为每个需要支持的设备、操作系统、架构或 GPU 组合创建一个单独的 modulesettings 文件。更多信息,请参阅 模块设置

假设我们将模块标记为DemoModulePython,则设置文件的基本格式如下:

JSON
{
  "Modules": {

    "DemoModulePython": {
      "Name": "My module name",
      "Version": "2.0.0",

      "PublishingInfo" : {
         ...
      },

      "LaunchSettings": {
         ...
      },

      "EnvironmentVariables": {
         ...
      },

      "GpuOptions" : {
         ...
      },

      "InstallOptions" : {
         ...
      },

      "UIElements" : {
         ...
      },

      "RouteMaps": [
      {
         ...
      }]
    }
  }
}

让我们逐步完成此过程并填写值。

名称版本应该是不言自明的,模块 ID 是您希望提供的任何 ID,只要不与其他模块冲突即可。我们将模块标记为 DemoModulePython。

我们的发布信息部分将包含:

JSON
"PublishingInfo" : {
  "Description" : "Provides Object Detection YOLOv8",
  "Category"    : "Computer Vision",
  "Stack"       : "Python, PyTorch, YOLO",
  "License"     : "AGPL-3.0",
  "LicenseUrl"  : "https://gnu.ac.cn/licenses/agpl-3.0.en.html",
  "Author"      : "Chris Maunder",
  "Homepage"    : "https://codeproject.com/ai",
  "BasedOn"     : "ultralytics",                         // What project is this based on?
  "BasedOnUrl"  : "https://github.com/ultralytics/ultralytics" // The URL for that project
}

启动设置将包含:

JSON
"LaunchSettings": {
  "AutoStart"          : true,                // Start this when the server starts
  "FilePath"           : "detect_adapter.py", // Name of file that gets launched  
  "Runtime"            : "python3.8",         // file is launched by Python
  "RuntimeLocation"    : "Local",             // We want our own virt. env., not a shared one
  "PostStartPauseSecs" : 1,                   // Generally 1 if using GPU, 0 for CPU
  "Queue"              : "objdetect_queue",   // Can be left as null if you wish
  "Parallelism"        : 0                    // 0 = Default (number of CPUs - 1)
}
  • 文件路径运行时是这里最重要的字段。如果需要,其他所有字段都可以省略。
  • 队列指定服务器将客户端请求放置的位置,以及模块将查找请求以进行处理的队列名称。您可以将其留空,或者如果希望多个模块服务同一队列,则可以提供名称。
  • 并行度表示将运行以服务此队列的并行任务数。
  • RuntimeLocation 目前仅用于 Python,可以是“shared”(共享),这意味着此模块将使用共享虚拟环境来节省空间,或者“local”(本地),这意味着 venv 将是此模块的本地环境(以避免包冲突)。

环境变量部分包含我们希望在启动前设置的任何环境变量。

JSON
"EnvironmentVariables": {
  "MODEL_SIZE" : "Medium",   // tiny, small, medium, large
  "MODELS_DIR" : "%CURRENT_MODULE_PATH%/assets"
}

请注意CURRENT_MODULE_PATH宏的使用。更多信息,请参阅

GpuOptions仅用于 GPU 设置。

JSON
"GpuOptions": {
  "InstallGPU"            : true,    // Should we install GPU enabled code?
  "EnableGPU"             : true,    // Should we enable GPU support (if installed)
  "AcceleratorDeviceName" : null,    // eg "cuda:0" or just leave blank for default
  "HalfPrecision"         : "enable" // For code that supports half-precision. Use 'Force', 'Enable', 'Disable'
}
  • HalfPrecision允许您在不支持半精度运算的旧版 CUDA 卡上禁用半精度运算。通常可以省略此项,因为 CodeProject.AI 服务器可以为您做出一些合理的推测。

安装选项描述了模块如何、在何处以及是否应该或可以安装。

JSON
"InstallOptions": {
  "Platforms":      [ "windows", "linux" ], 
  "ModuleReleases": [ 
      { "ModuleVersion": "1.0.0", "ServerVersionRange": [ "1.0.0", "2.4.9" ],
        "ReleaseDate": "2023-01-01", "ReleaseNotes": "Initial Release", 
        "Importance": "Major" },
     { "ModuleVersion": "2.0.0", "ServerVersionRange": [ "2.5.0", "" ],
       "ReleaseDate": "2023-02-14", "ReleaseNotes": "Updated for Server 2.5.0",
       "Importance": "Major" } 
  ]
}
  • 平台是一个平台列表。支持的选项包括:windows、macos、linux、raspberrypi、orangepi、jetson,以及 arm64 变体:windows-arm64、macos-arm64、linux-arm64。或者,使用“all”表示它可以在任何地方运行。
  • 模块版本是一个版本数组以及它兼容的服务器版本。在本例中,版本 1 兼容 CodeProject.AI 服务器版本 1 到 2.4.9,模块的版本 2 兼容 CodeProject.AI 版本 2.5 及更高版本。

UIElements为服务器提供有关 UI 选项的信息。我们只讨论仪表板中模块行上出现的上下文菜单。我们将提供一个提供模型大小的菜单。

JSON
"UIElements" : {
  "Menus": [{
     "Label": "Half Precision",
     "Options": [
       { "Label": "Force on",    "Setting": "CPAI_HALF_PRECISION", "Value": "force"   },
       { "Label": "Use Default", "Setting": "CPAI_HALF_PRECISION", "Value": "enable"  },
       { "Label": "Disable",     "Setting": "CPAI_HALF_PRECISION", "Value": "disable" }
     ]
  }]
},
添加第二个菜单选项就像添加另一个菜单对象({ "Label": .... "Options": ...})一样简单。

路由映射定义模块的 API 路由。

JSON
"RouteMaps": [{
  "Name": "Python YOLOv8 Object Detector",
  "Route": "vision/detection",
  "Method": "POST",
  "Command": "detect",
  "Description": "Detects objects",

  "Inputs": [
    {
      "Name": "image",
      "Type": "File",
      "Description": "The HTTP file object (image) to be analyzed."
    },
    {
      "Name": "min_confidence",
      "Type": "Float",
      "Description": "The minimum confidence level (0.0 - 1.0) for an object will be detected.",
      "DefaultValue": 0.4,
      "MinValue": 0.0,
      "MaxValue": 1.0
    }],

  "Outputs": [{
    "Name": "success",
    "Type": "Boolean",
    "Description": "True if successful."
    },
    ... 
  ]
 }
]
  • 路由是调用者将用于调用此模块的路由。vision/detection 路由将对应于 API 调用 https://:32168/v1/vision/detection。
  • 命令是将发送到此路由的命令。您可以设置指向同一路径但发送不同命令的路由。由您的模块负责适当地处理命令。
  • 输入输出定义输入参数和输出结果,并用于自动记录您的模块。

添加变体模块设置文件

假设您希望在模块在 Windows 上运行时提供不同的设置。例如,您可能希望对 Windows 使用 Python 3.9。只需创建一个 modulesettings 的变体,其文件名确保仅在 Windows 上选择它(有关信息,请参阅 模块设置文件)。在这种情况下,modulesettings.windows.json 将适用于一般的 Windows 安装,我们只需要覆盖我们希望更改的值。

JSON
{
  "Modules": {
    "MyModuleId": {
      "LaunchSettings": {
        "Runtime": "python3.9"
      }
    }
  }
}

© . All rights reserved.