carlesonielfa
commited on
Commit
•
50589b7
1
Parent(s):
192d6ae
Update to Sentis 2.1.1
Browse files- README.md +2 -3
- RunPhi15.cs +20 -20
README.md
CHANGED
@@ -5,8 +5,7 @@ pipeline_tag: text-generation
|
|
5 |
---
|
6 |
|
7 |
|
8 |
-
# Phi 1.5 Model in Unity Sentis (Version 1.
|
9 |
-
*Version 1.3.0 Sentis files are not compatible with Sentis 1.5.0 and need to be recreated/downloaded
|
10 |
|
11 |
This is the [Microsoft Phi 1.5](https://huggingface.co/microsoft/phi-1_5) model checked to run on Unity 2023. Phi 1.5 is a Large Language Model that was trained on synthesized data. Please see their page for more information about the model and license.
|
12 |
The model has 1.3 billion parameters.
|
@@ -14,7 +13,7 @@ The model has 1.3 billion parameters.
|
|
14 |
|
15 |
## How to Use
|
16 |
* Create a new scene in Unity 2023
|
17 |
-
* Install `com.unity.sentis` version `1.
|
18 |
* Add the RunPhi15.cs file to the Main Camera
|
19 |
* Put `phi15.sentis`, `vocab.json` and `merges.txt` in the Assets/StreamingAssets folder
|
20 |
* Adjust some of the variables such as the `outputText` string to set the prompt
|
|
|
5 |
---
|
6 |
|
7 |
|
8 |
+
# Phi 1.5 Model in Unity Sentis (Version 2.1.1)
|
|
|
9 |
|
10 |
This is the [Microsoft Phi 1.5](https://huggingface.co/microsoft/phi-1_5) model checked to run on Unity 2023. Phi 1.5 is a Large Language Model that was trained on synthesized data. Please see their page for more information about the model and license.
|
11 |
The model has 1.3 billion parameters.
|
|
|
13 |
|
14 |
## How to Use
|
15 |
* Create a new scene in Unity 2023
|
16 |
+
* Install `com.unity.sentis` version `2.1.1` and `com.unity.nuget.newtonsoft-json` packages
|
17 |
* Add the RunPhi15.cs file to the Main Camera
|
18 |
* Put `phi15.sentis`, `vocab.json` and `merges.txt` in the Assets/StreamingAssets folder
|
19 |
* Adjust some of the variables such as the `outputText` string to set the prompt
|
RunPhi15.cs
CHANGED
@@ -45,7 +45,7 @@ public class RunPhi15: MonoBehaviour
|
|
45 |
//Store the vocabulary
|
46 |
string[] tokens;
|
47 |
|
48 |
-
|
49 |
|
50 |
int currentToken = 0;
|
51 |
int[] outputTokens = new int[maxTokens];
|
@@ -76,16 +76,14 @@ public class RunPhi15: MonoBehaviour
|
|
76 |
int outputIndex = model1.outputs.Count - 1;
|
77 |
//var model1 = ModelLoader.Load(asset);
|
78 |
//Create a new model to select the random token:
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
(model1.inputs[0], InputDef.Int(new TensorShape()))
|
86 |
-
);
|
87 |
|
88 |
-
engine =
|
89 |
|
90 |
DecodePrompt(outputString);
|
91 |
|
@@ -103,17 +101,19 @@ public class RunPhi15: MonoBehaviour
|
|
103 |
|
104 |
void RunInference()
|
105 |
{
|
106 |
-
using var tokensSoFar = new
|
107 |
-
using var index = new
|
108 |
-
|
109 |
-
engine.
|
110 |
-
|
111 |
-
|
|
|
|
|
112 |
//Debug.Log(probs.shape);
|
113 |
|
114 |
-
probs.
|
115 |
-
|
116 |
-
int ID =
|
117 |
|
118 |
//shift window down if got to the end
|
119 |
if (currentToken >= maxTokens - 1)
|
@@ -266,4 +266,4 @@ public class RunPhi15: MonoBehaviour
|
|
266 |
engine?.Dispose();
|
267 |
}
|
268 |
|
269 |
-
}
|
|
|
45 |
//Store the vocabulary
|
46 |
string[] tokens;
|
47 |
|
48 |
+
Worker engine;
|
49 |
|
50 |
int currentToken = 0;
|
51 |
int[] outputTokens = new int[maxTokens];
|
|
|
76 |
int outputIndex = model1.outputs.Count - 1;
|
77 |
//var model1 = ModelLoader.Load(asset);
|
78 |
//Create a new model to select the random token:
|
79 |
+
FunctionalGraph graph = new FunctionalGraph();
|
80 |
+
FunctionalTensor input_0 = graph.AddInput<int>(new TensorShape(1, maxTokens));
|
81 |
+
FunctionalTensor input_1 = graph.AddInput<int>(new TensorShape(1));
|
82 |
+
FunctionalTensor row = Functional.Select(Functional.Forward(model1, input_0)[outputIndex], 1, input_1);
|
83 |
+
FunctionalTensor output = Functional.Multinomial(predictability * row, 1);
|
84 |
+
Model model2 = graph.Compile(output);
|
|
|
|
|
85 |
|
86 |
+
engine = new Worker(model2, backend);
|
87 |
|
88 |
DecodePrompt(outputString);
|
89 |
|
|
|
101 |
|
102 |
void RunInference()
|
103 |
{
|
104 |
+
using var tokensSoFar = new Tensor<int>(new TensorShape(1, maxTokens), outputTokens);
|
105 |
+
using var index = new Tensor<int>(new TensorShape(1));
|
106 |
+
index[0] = currentToken;
|
107 |
+
engine.SetInput("input_0", tokensSoFar);
|
108 |
+
engine.SetInput("input_1", index);
|
109 |
+
engine.Schedule();
|
110 |
+
|
111 |
+
var probs = engine.PeekOutput() as Tensor<int>;
|
112 |
//Debug.Log(probs.shape);
|
113 |
|
114 |
+
probs.CompleteAllPendingOperations();
|
115 |
+
var result = probs.ReadbackAndClone();
|
116 |
+
int ID = result[0];
|
117 |
|
118 |
//shift window down if got to the end
|
119 |
if (currentToken >= maxTokens - 1)
|
|
|
266 |
engine?.Dispose();
|
267 |
}
|
268 |
|
269 |
+
}
|