Update docs and examples to showcase the new async runtime with coroutines and cross‑thread signaling.
This commit is contained in:
parent
bcde3962ce
commit
726a2d0691
@ -101,7 +101,7 @@ const std = @import("std");
|
|||||||
const zml = @import("zml");
|
const zml = @import("zml");
|
||||||
const asynk = @import("async");
|
const asynk = @import("async");
|
||||||
|
|
||||||
// shortcut to the async_ function in the asynk module
|
// shortcut to the asyncc function in the asynk module
|
||||||
const asyncc = asynk.asyncc;
|
const asyncc = asynk.asyncc;
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -263,11 +263,11 @@ var model_weights = try zml.aio.loadBuffers(Layer, .{}, bs, arena, platform);
|
|||||||
defer zml.aio.unloadBuffers(&model_weights); // for good practice
|
defer zml.aio.unloadBuffers(&model_weights); // for good practice
|
||||||
|
|
||||||
// Wait for compilation to finish
|
// Wait for compilation to finish
|
||||||
const compiled = try compilation.await_();
|
const compiled = try compilation.awaitt();
|
||||||
```
|
```
|
||||||
|
|
||||||
Compiling is happening in the background via the `async_` function. We call
|
Compiling is happening in the background via the `asyncc` function. We call
|
||||||
`async_` with the `zml.compileModel` function and its arguments
|
`asyncc` with the `zml.compileModel` function and its arguments
|
||||||
separately. The arguments themselves are basically the shapes of the weights in
|
separately. The arguments themselves are basically the shapes of the weights in
|
||||||
the BufferStore, the `.forward` function name in order to compile
|
the BufferStore, the `.forward` function name in order to compile
|
||||||
`Layer.forward`, the shape of the input tensor(s), and the platform for which to
|
`Layer.forward`, the shape of the input tensor(s), and the platform for which to
|
||||||
@ -494,7 +494,7 @@ pub fn asyncMain() !void {
|
|||||||
defer zml.aio.unloadBuffers(&model_weights); // for good practice
|
defer zml.aio.unloadBuffers(&model_weights); // for good practice
|
||||||
|
|
||||||
// Wait for compilation to finish
|
// Wait for compilation to finish
|
||||||
const compiled = try compilation.await_();
|
const compiled = try compilation.awaitt();
|
||||||
|
|
||||||
// pass the model weights to the compiled module to create an executable
|
// pass the model weights to the compiled module to create an executable
|
||||||
// module
|
// module
|
||||||
|
|||||||
@ -63,7 +63,7 @@ pub fn asyncMain() !void {
|
|||||||
var compilation = try asynk.asyncc(zml.module.compileModel, .{ allocator, Benchmark.forward, Benchmark{}, .{ a_shape, b_shape }, platform });
|
var compilation = try asynk.asyncc(zml.module.compileModel, .{ allocator, Benchmark.forward, Benchmark{}, .{ a_shape, b_shape }, platform });
|
||||||
|
|
||||||
// Wait for compilation to finish
|
// Wait for compilation to finish
|
||||||
const compiled = try compilation.await_();
|
const compiled = try compilation.awaitt();
|
||||||
const compilation_elapsed = timer.lap() / std.time.ns_per_ms;
|
const compilation_elapsed = timer.lap() / std.time.ns_per_ms;
|
||||||
std.debug.print("-" ** 160 ++ "\n\n", .{});
|
std.debug.print("-" ** 160 ++ "\n\n", .{});
|
||||||
std.debug.print("✅ Compiled Benchmark model in {d} milliseconds! \n", .{compilation_elapsed});
|
std.debug.print("✅ Compiled Benchmark model in {d} milliseconds! \n", .{compilation_elapsed});
|
||||||
|
|||||||
@ -217,9 +217,9 @@ pub fn asyncMain() !void {
|
|||||||
defer zml.aio.unloadBuffers(&llama_weights);
|
defer zml.aio.unloadBuffers(&llama_weights);
|
||||||
log.info("✅\tLoaded weights in {d}ms", .{start.read() / std.time.ns_per_ms});
|
log.info("✅\tLoaded weights in {d}ms", .{start.read() / std.time.ns_per_ms});
|
||||||
|
|
||||||
var llama_module_prefill = try (try fut_mod_prefill.await_()).prepare(allocator, llama_weights);
|
var llama_module_prefill = try (try fut_mod_prefill.awaitt()).prepare(allocator, llama_weights);
|
||||||
defer llama_module_prefill.deinit();
|
defer llama_module_prefill.deinit();
|
||||||
var llama_module = try (try fut_mod.await_()).prepare(allocator, llama_weights);
|
var llama_module = try (try fut_mod.awaitt()).prepare(allocator, llama_weights);
|
||||||
defer llama_module.deinit();
|
defer llama_module.deinit();
|
||||||
log.info("✅\tCompiled model in {d}ms", .{start.read() / std.time.ns_per_ms});
|
log.info("✅\tCompiled model in {d}ms", .{start.read() / std.time.ns_per_ms});
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,11 @@ const show_mlir = true;
|
|||||||
|
|
||||||
const log = std.log.scoped(.mnist);
|
const log = std.log.scoped(.mnist);
|
||||||
|
|
||||||
|
pub const std_options: std.Options = .{
|
||||||
|
.logFn = asynk.logFn,
|
||||||
|
.log_level = .info,
|
||||||
|
};
|
||||||
|
|
||||||
/// Model definition
|
/// Model definition
|
||||||
const Mnist = struct {
|
const Mnist = struct {
|
||||||
fc1: Layer,
|
fc1: Layer,
|
||||||
@ -78,7 +83,7 @@ pub fn asyncMain() !void {
|
|||||||
defer zml.aio.unloadBuffers(&model_weights);
|
defer zml.aio.unloadBuffers(&model_weights);
|
||||||
|
|
||||||
// Wait for end of compilation and end of weights loading.
|
// Wait for end of compilation and end of weights loading.
|
||||||
const compiled_mnist = try compilation.wait();
|
const compiled_mnist = try compilation.awaitt();
|
||||||
log.info("✅ Compiled model in {d}ms", .{start_time.read() / std.time.ns_per_ms});
|
log.info("✅ Compiled model in {d}ms", .{start_time.read() / std.time.ns_per_ms});
|
||||||
|
|
||||||
var mnist = try compiled_mnist.prepare(allocator, model_weights);
|
var mnist = try compiled_mnist.prepare(allocator, model_weights);
|
||||||
@ -222,8 +227,3 @@ const digits = [_][]const u8{
|
|||||||
\\ | ##### |
|
\\ | ##### |
|
||||||
,
|
,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const std_options = .{
|
|
||||||
.logFn = asynk.logFn,
|
|
||||||
.log_level = .info,
|
|
||||||
};
|
|
||||||
|
|||||||
@ -71,7 +71,7 @@ pub fn asyncMain() !void {
|
|||||||
defer zml.aio.unloadBuffers(&model_weights); // for good practice
|
defer zml.aio.unloadBuffers(&model_weights); // for good practice
|
||||||
|
|
||||||
// Wait for compilation to finish
|
// Wait for compilation to finish
|
||||||
const compiled = try compilation.await_();
|
const compiled = try compilation.awaitt();
|
||||||
|
|
||||||
// pass the model weights to the compiled module to create an executable module
|
// pass the model weights to the compiled module to create an executable module
|
||||||
var executable = try compiled.prepare(arena, model_weights);
|
var executable = try compiled.prepare(arena, model_weights);
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
"build_options": [
|
"build_options": [
|
||||||
{
|
{
|
||||||
"name": "cmd",
|
"name": "cmd",
|
||||||
"value": "bazel run @zml//zml:completion"
|
"value": "bazel run @zml//:completion"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user