Chuyển tới nội dung chính

Các phương thức của yêu cầu CoreML đa dụng

coreml_model_request_object là đối tượng suy luận do coreml.new_model_request(...) / coreml.session(...) trả về.
Đối tượng này đưa các đặc trưng đầu vào đã chuẩn bị vào mô hình và trả về kết quả được sắp xếp theo tên đầu ra.

Phạm vi trách nhiệm của đối tượng được giới hạn rõ ràng:

  • gửi tác vụ suy luận
  • đọc kết quả bất đồng bộ
  • xem chữ ký đầu vào / đầu ra
  • xem cấu hình yêu cầu hiện tại

Đối tượng không thực hiện tách token, tiền xử lý ảnh hoặc hậu xử lý ở cấp nghiệp vụ; các bước đó cần được kết hợp trong Lua.

Các phương thức này khả dụng trong các phiên bản phát hành sau 20260319

Phương thức suy luận

:predict(inputs[, opts])

result, err = request:predict(inputs)

hoặc

submitted, err = request:predict(inputs, {
async = is_async,
multi_array_output = "table" or "MLMultiArray",
uses_cpu_only = cpu_only_for_this_call,
})

Chạy suy luận cho một mẫu.

  • inputs phải là một bảng có khóa là tên đầu vào
  • Trong chế độ đồng bộ, bảng kết quả được trả về trực tiếp
  • Trong chế độ bất đồng bộ, chỉ trả về true; sau đó dùng :is_done():results()
  • multi_array_output kiểm soát việc đầu ra MLMultiArray được giữ dưới dạng đối tượng tensor gốc hay chuyển thành bảng Lua
  • uses_cpu_only chỉ ảnh hưởng đến lời gọi này và không thay đổi cấu hình mặc định của đối tượng

:run(inputs[, opts])

run() là bí danh của predict().

:predict_batch(batch_inputs[, opts])

batch_result, err = request:predict_batch({
{ input_ids = ids1 },
{ input_ids = ids2 },
}, {
async = false,
multi_array_output = "MLMultiArray",
})

Chạy suy luận theo lô. Yêu cầu iOS 12 trở lên.

  • batch_inputs phải là một mảng; mỗi phần tử là bảng đầu vào của một mẫu, có khóa là tên đầu vào
  • Trong chế độ đồng bộ, trả về mảng kết quả theo lô; mỗi phần tử vẫn tuân theo cấu trúc đầu ra của một mẫu
  • Trong chế độ bất đồng bộ, trả về true; gọi :results() sau đó để lấy kết quả theo lô
  • opts sử dụng các trường giống với predict()

:run_batch(batch_inputs[, opts])

run_batch() là bí danh của predict_batch().

:results([opts])

result, err = request:results()

hoặc

result, err = request:results({
multi_array_output = "table" or "MLMultiArray",
})

Đọc kết quả của lần suy luận bất đồng bộ gần nhất.

  • Nếu lời gọi bất đồng bộ gần nhất đến từ predict(), phương thức trả về bảng kết quả của một mẫu
  • Nếu lời gọi bất đồng bộ gần nhất đến từ predict_batch(), phương thức trả về mảng kết quả theo lô
  • Theo mặc định, multi_array_output dùng thiết lập của lời gọi suy luận gần nhất
  • Nếu tác vụ bất đồng bộ vẫn đang chạy, trả về nil, "not yet"
  • Nếu không có kết quả đã hoàn tất thành công để đọc, trả về nil, "unknown"

:is_done()

done = request:is_done()

Kiểm tra lần suy luận bất đồng bộ gần nhất đã hoàn tất hay chưa. Phương thức này chỉ có ý nghĩa sau predict(..., { async = true }) hoặc predict_batch(..., { async = true }).

Cấu hình thời gian chạy và siêu dữ liệu

:metadata()

metadata = request:metadata()

Trả về siêu dữ liệu tích hợp của mô hình.

:uses_cpu_only()

cpu_only = request:uses_cpu_only()

Trả về cấu hình mặc định chỉ dùng CPU đã được lưu khi tạo yêu cầu.

:compute_units()

compute_units = request:compute_units()

Trả về chuỗi compute_units hiện tại được yêu cầu này ghi lại.

  • Trên iOS 12 trở lên, phương thức trả về chuỗi chữ thường đã ghi lại tại thời điểm tạo
  • Các kết quả thường gặp gồm "all", "cpu_only", "cpu", "cpu_and_gpu", "gpu", "cpu_and_neural_engine", "ane""neural_engine"
  • Nếu yêu cầu được tạo với uses_cpu_only = true, phương thức trả về "cpu_only"
  • Trên iOS 11, phương thức trả về nil

Phương thức chữ ký đầu vào và đầu ra

:input_count() / :output_count()

Trả về số lượng đặc trưng đầu vào / đầu ra.

:input_features() / :output_features()

Trả về các bảng mô tả đặc trưng có khóa là tên.

Triển khai hiện tại cung cấp một tập hợp trường gọn nhẹ:

  • type
  • optional
  • Chỉ với đặc trưng multi_array: shapedata_type

:input_info(name_or_index) / :output_info(name_or_index)

Đọc mô tả của một đầu vào / đầu ra theo tên hoặc theo chỉ mục bắt đầu từ 1.

  • Các trường trả về phần lớn giống với input_features() / output_features()
  • Có thêm trường name
  • Chỉ mục số tuân theo cùng thứ tự mà input_names() / output_names() sử dụng

:input_names() / :output_names()

Trả về danh sách tên đầu vào / đầu ra có thứ tự ổn định.

  • Tên được sắp xếp theo thứ tự từ điển
  • Thứ tự của output_names() khớp với thứ tự chỉ mục số trong kết quả suy luận đồng bộ

:class_labels()

Trả về nhãn lớp do mô hình khai báo. Yêu cầu iOS 14 trở lên.

Vòng đời và kiểm tra kiểu

:close()

Hủy trạng thái yêu cầu bên dưới. Không nên sử dụng lại đối tượng sau khi đóng.

:is_model_request() / :is_session()

Các tiện ích kiểm tra kiểu ở cấp đối tượng. Đây là các bí danh tương đương.

Lưu ý

  • predict() / run() luôn trả về một bảng
  • Kết quả hỗ trợ cả chỉ mục số và chỉ mục theo tên đầu ra
  • predict_batch() / run_batch() trả về mảng kết quả theo lô; mỗi phần tử vẫn hỗ trợ truy cập theo cả chỉ mục số và tên đầu ra
  • Trong các API yêu cầu đa dụng mới hơn, đầu ra MLMultiArray mặc định được giữ dưới dạng đối tượng tensor gốc để xử lý tiếp
  • Để xem các giá trị hoặc duy trì khả năng tương thích với tập lệnh cũ dựa trên bảng, hãy truyền multi_array_output = "table"

Ví dụ truy cập kết quả:

out[1]
out.text_features
batch_out[1].text_features

Ví dụ

local req = assert(coreml.new_model_request(XXT_HOME_PATH.."/models/demo.mlmodelc"))

local out = assert(req:predict({
input_ids = ids,
}, {
multi_array_output = "MLMultiArray",
}))

print(out[1])
print(out.text_features)
print(req:output_names())