-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathRemoteModelSession.cs
More file actions
39 lines (31 loc) · 1.73 KB
/
Copy pathRemoteModelSession.cs
File metadata and controls
39 lines (31 loc) · 1.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System.Collections.Generic;
using Microsoft.ML.OnnxRuntime;
namespace DiffSingerForTuneLab;
// IModelSession 的远程实现:经 RuntimeClient 把 Run 派发到 runtime(loopback / 子进程)。
// 以「模型路径」为稳定键交给 client——client 内部映射 path→sessionId 并在子进程 respawn 后按 path 重载,
// 故本会话跨 respawn 保持有效(sessionId 变化对上层透明)。
// 输入元数据(名→形状)在 Load 时一次性取回本地镜像(同模型跨 respawn 不变),HasInput/InputShape 走本地、不往返。
// 与 InProcessModelSession 对编排层完全等价——切换实现即切换「推理在哪跑」,编排一行不改。
internal sealed class RemoteModelSession : IModelSession
{
readonly RuntimeClient mClient;
readonly string mPath;
readonly IReadOnlyDictionary<string, int[]> mInputs;
RemoteModelSession(RuntimeClient client, string path, IReadOnlyDictionary<string, int[]> inputs)
{
mClient = client;
mPath = path;
mInputs = inputs;
}
public static RemoteModelSession Load(RuntimeClient client, string modelPath)
{
var inputs = client.Load(modelPath);
return new RemoteModelSession(client, modelPath, inputs);
}
public bool HasInput(string name) => mInputs.ContainsKey(name);
public IReadOnlyList<int> InputShape(string name) => mInputs[name];
public IReadOnlyList<NamedOnnxValue> Run(IReadOnlyCollection<NamedOnnxValue> inputs)
=> mClient.Run(mPath, inputs);
// 释放 host 侧会话(子进程内),避免单 runtime 生命周期内的会话泄漏;client 生命周期本身由缓存/引擎管理。
public void Dispose() => mClient.Release(mPath);
}