mirror of
https://github.com/LostRuins/koboldcpp.git
synced 2026-09-02 19:11:16 +02:00
ffaafde16f
* ggml-virtgpu-backend: validate the consistency of the received objects This patch adds consistency checks in the ggml-virtgpu-backend (running on the host side) to ensure that the data received from the guest is consistent (valid pointers, valid sizes and offsets). * ggml-virtgpu-backend: add fallback/skips for optional ggml backend methods ``` 1. bck->iface.synchronize(bck) 2. buft->iface.get_alloc_size(buft, op) 3. buft->iface.get_max_size(buft) ``` these three methods are optional in the GGML interface. `get_max_size` was already properly defaulted, but `backend sychronize` and `butf get_max_size` would have segfaulted the backend if not implemented. * ggml-virtgpu-backend: fix log format missing argument * ggml-virtgpu-backend: improve the abort message * ggml-virtgpu-backend: more safety checks * ggml-virtgpu-backend: new error code * ggml-virtgpu-backend: initialize all the error codes * ggml-virtgpu: add a missing comment generated by the code generator * ggml-virtgpu: add the '[virtgpu]' prefix to the device/buffer names * ggml-virtgpu: apir_device_buffer_from_ptr: improve the error message * ggml-virtgpu: shared: make it match the latest api_remoting.h of Virglrenderer APIR (still unmerged) * ggml-virtgpu: update the code generator to have dispatch_command_name in a host/guest shared file * ggml-virtgpu: REMOTE_CALL: fail if the backend returns an error * docs/backend/VirtGPU.md: indicate that the RAM+VRAM size is limed to 64 GB with libkrun * ggml-virtgpu: turn off clang-format header ordering for some of the files Compilation breaks when ordered alphabetically. * ggml-virtgpu: clang-format * ggml-virtgpu/backend/shared/api_remoting: better comments for the APIR return codes
70 lines
2.5 KiB
C++
70 lines
2.5 KiB
C++
#include "../../include/ggml-virtgpu.h"
|
|
#include "ggml-remoting.h"
|
|
|
|
static const char * ggml_backend_remoting_get_name(ggml_backend_t backend) {
|
|
UNUSED(backend);
|
|
|
|
return "API Remoting backend";
|
|
}
|
|
|
|
static void ggml_backend_remoting_free(ggml_backend_t backend) {
|
|
delete backend;
|
|
}
|
|
|
|
static ggml_status ggml_backend_remoting_graph_compute(ggml_backend_t backend, ggml_cgraph * cgraph) {
|
|
virtgpu * gpu = DEV_TO_GPU(backend->device);
|
|
|
|
return apir_backend_graph_compute(gpu, cgraph);
|
|
}
|
|
|
|
static void ggml_backend_remoting_graph_optimize(ggml_backend_t backend, ggml_cgraph * cgraph) {
|
|
virtgpu * gpu = DEV_TO_GPU(backend->device);
|
|
#if true
|
|
UNUSED(gpu);
|
|
UNUSED(cgraph);
|
|
#else
|
|
// not working yet
|
|
|
|
apir_backend_graph_optimize(gpu, cgraph);
|
|
#endif
|
|
}
|
|
|
|
static ggml_backend_i ggml_backend_remoting_interface = {
|
|
/* .get_name = */ ggml_backend_remoting_get_name,
|
|
/* .free = */ ggml_backend_remoting_free,
|
|
/* .set_tensor_async = */ NULL, // ggml_backend_remoting_set_tensor_async,
|
|
/* .get_tensor_async = */ NULL, // ggml_backend_remoting_get_tensor_async,
|
|
/* .cpy_tensor_async = */ NULL, // ggml_backend_remoting_cpy_tensor_async,
|
|
/* .synchronize = */ NULL, // ggml_backend_remoting_synchronize,
|
|
/* .graph_plan_create = */ NULL,
|
|
/* .graph_plan_free = */ NULL,
|
|
/* .graph_plan_update = */ NULL,
|
|
/* .graph_plan_compute = */ NULL,
|
|
/* .graph_compute = */ ggml_backend_remoting_graph_compute,
|
|
/* .event_record = */ NULL,
|
|
/* .event_wait = */ NULL,
|
|
/* .graph_optimize = */ ggml_backend_remoting_graph_optimize,
|
|
};
|
|
|
|
static ggml_guid_t ggml_backend_remoting_guid() {
|
|
static ggml_guid guid = { 0xb8, 0xf7, 0x4f, 0x86, 0x14, 0x03, 0x86, 0x02,
|
|
0x91, 0xc8, 0xdd, 0xe9, 0x02, 0x3f, 0xc0, 0x2b };
|
|
|
|
return &guid;
|
|
}
|
|
|
|
ggml_backend_t ggml_backend_remoting_device_init(ggml_backend_dev_t dev, const char * params) {
|
|
UNUSED(params);
|
|
|
|
ggml_backend_remoting_device_context * ctx = (ggml_backend_remoting_device_context *) dev->context;
|
|
|
|
ggml_backend_t remoting_backend = new ggml_backend{
|
|
/* .guid = */ ggml_backend_remoting_guid(),
|
|
/* .interface = */ ggml_backend_remoting_interface,
|
|
/* .device = */ ggml_backend_reg_dev_get(ggml_backend_virtgpu_reg(), ctx->device),
|
|
/* .context = */ ctx,
|
|
};
|
|
|
|
return remoting_backend;
|
|
}
|