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.
inputsphả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()và:results() multi_array_outputkiểm soát việc đầu raMLMultiArrayđược giữ dưới dạng đối tượng tensor gốc hay chuyển thành bảng Luauses_cpu_onlychỉ ả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_inputsphả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ô optssử dụng các trường giống vớipredict()
: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_outputdù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"và"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ẹ:
typeoptional- Chỉ với đặc trưng
multi_array:shapevàdata_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
MLMultiArraymặ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())