From eade853366ef73fc3bcb32cb57de907caacd0f14 Mon Sep 17 00:00:00 2001 From: xcssa Date: Tue, 2 May 2023 21:30:42 +0800 Subject: [PATCH] Support RWKV4 Raven 1B5-14B (CPU/GPU) --- CRWKV.sln | 6 ++ CRWKV/CRWKV.csproj | 26 +++--- CRWKV/Program.cs | 29 ++----- CRWKV/RWKV/OnnxModel.cs | 158 ++++++++++++++++++++++++++++++++++++ CRWKV/RWKV/Runner.cs | 148 ++++++++++++++++++--------------- CRWKV/RWKV/RunnerFactory.cs | 37 +++++++++ CRWKV/RWKV/Tokenizer.cs | 13 ++- Preview/1.png | Bin 0 -> 70108 bytes README.md | 18 ++-- 9 files changed, 330 insertions(+), 105 deletions(-) create mode 100644 CRWKV/RWKV/OnnxModel.cs create mode 100644 CRWKV/RWKV/RunnerFactory.cs create mode 100644 Preview/1.png diff --git a/CRWKV.sln b/CRWKV.sln index 8f1ae77..97c6123 100644 --- a/CRWKV.sln +++ b/CRWKV.sln @@ -8,13 +8,19 @@ EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {D2C9B375-1A91-47C9-9953-5D9B7289AEBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D2C9B375-1A91-47C9-9953-5D9B7289AEBB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D2C9B375-1A91-47C9-9953-5D9B7289AEBB}.Debug|x64.ActiveCfg = Debug|x64 + {D2C9B375-1A91-47C9-9953-5D9B7289AEBB}.Debug|x64.Build.0 = Debug|x64 {D2C9B375-1A91-47C9-9953-5D9B7289AEBB}.Release|Any CPU.ActiveCfg = Release|Any CPU {D2C9B375-1A91-47C9-9953-5D9B7289AEBB}.Release|Any CPU.Build.0 = Release|Any CPU + {D2C9B375-1A91-47C9-9953-5D9B7289AEBB}.Release|x64.ActiveCfg = Release|x64 + {D2C9B375-1A91-47C9-9953-5D9B7289AEBB}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/CRWKV/CRWKV.csproj b/CRWKV/CRWKV.csproj index e8bf190..7ca45c1 100644 --- a/CRWKV/CRWKV.csproj +++ b/CRWKV/CRWKV.csproj @@ -1,16 +1,18 @@ - + - - Exe - net6.0 - enable - enable - true - + + Exe + net6.0 + enable + enable + true + AnyCPU;x64 + - - - - + + + + + diff --git a/CRWKV/Program.cs b/CRWKV/Program.cs index 08d5575..9b28778 100644 --- a/CRWKV/Program.cs +++ b/CRWKV/Program.cs @@ -1,31 +1,20 @@ using RWKV; -Console.Write("Input Model Name(rwkv-4-pile-169m-uint8.onnx): "); +Console.Write("Input Model Name(RWKV_32_2560_16.onnx): "); var modelName = Console.ReadLine(); if (string.IsNullOrEmpty(modelName)) - modelName = "rwkv-4-pile-169m-uint8.onnx"; + modelName = "RWKV_32_2560_16.onnx"; -Console.Write("ctx_len(1024): "); -var ctx_len = 1024; -var ctx_len_str = Console.ReadLine(); -if (!string.IsNullOrEmpty(ctx_len_str)) - ctx_len = int.Parse(ctx_len_str); +var modelNames = modelName.Split("_"); +var n_layer = int.Parse(modelNames[1]); +var n_embd = int.Parse(modelNames[2]); -Console.Write("n_layer(12): "); -var n_layer = 12; -var n_layer_str = Console.ReadLine(); -if (!string.IsNullOrEmpty(n_layer_str)) - n_layer = int.Parse(n_layer_str); +Console.WriteLine($"Loading..."); -Console.Write("n_embd(768): "); -var n_embd = 768; -var n_embd_str = Console.ReadLine(); -if (!string.IsNullOrEmpty(n_embd_str)) - n_embd = int.Parse(n_embd_str); +var rf = new RunnerFactory(modelName, n_layer, n_embd); +rf.Init(); +var r = rf.NewRunner(); -Console.WriteLine($"Loading({modelName})[{ctx_len},{n_layer},{n_embd}]..."); -var r = new Runner(modelName, ctx_len, n_layer, n_embd); -r.Init(); while (true) { Console.Write(">"); diff --git a/CRWKV/RWKV/OnnxModel.cs b/CRWKV/RWKV/OnnxModel.cs new file mode 100644 index 0000000..f0c81ce --- /dev/null +++ b/CRWKV/RWKV/OnnxModel.cs @@ -0,0 +1,158 @@ +using Microsoft.ML.OnnxRuntime; +using Microsoft.ML.OnnxRuntime.Tensors; + +namespace RWKV +{ + public enum OnnxModelType + { + FP16, + FP32 + } + + public class OnnxModel + { + private InferenceSession _inferenceSession; + private Type _type; + private int _embed; + private int _layers; + private List _input_names; + private List _output_names; + private List _inputs; + private OnnxModelType _modelType; + + public OnnxModelType ModelType => _modelType; + + public OnnxModel(string model, int embed, int layers) + { + var options = new SessionOptions(); + options.AppendExecutionProvider_CPU(); + options.AppendExecutionProvider_CUDA(); + _inferenceSession = new InferenceSession(model, options); + _type = _inferenceSession.InputMetadata["instate0"].ElementType; + _embed = embed; + _layers = layers; + _input_names = _inferenceSession.InputMetadata.Select(x => x.Key).ToList(); + _output_names = _inferenceSession.OutputMetadata.Select(x => x.Key).ToList(); + _inputs = new List(); + + if (_type == typeof(Float16)) + { + _modelType = OnnxModelType.FP16; + } + else if (_type == typeof(float)) + { + _modelType = OnnxModelType.FP32; + } + else + { + throw new NotSupportedException(); + } + } + + public object GetEmptyStates() + { + switch (_modelType) + { + case OnnxModelType.FP16: + { + var state = new List>(); + for (int i = 0; i < _layers; i++) + { + state.Add(GDenseTensor(0)); + state.Add(GDenseTensor(0)); + state.Add(GDenseTensor(0)); + state.Add(GDenseTensor(0)); + state.Add(GDenseTensor(64512)); + } + return state; + } + case OnnxModelType.FP32: + { + var state = new List>(); + for (int i = 0; i < _layers; i++) + { + state.Add(GDenseTensor(0)); + state.Add(GDenseTensor(0)); + state.Add(GDenseTensor(0)); + state.Add(GDenseTensor(0)); + state.Add(GDenseTensor(float.NegativeInfinity)); + } + return state; + }; + default: + throw new NotSupportedException(); + } + } + + public (IEnumerable logits, object state) Forward(int xi, object state) + { + switch (_modelType) + { + case OnnxModelType.FP16: + { + var ret = Forward_FP16(xi, (List>)state); + return (ret.logits.Select(x => HalfToSinglePrecision(x)).AsEnumerable(), ret.state); + } + case OnnxModelType.FP32: + { + var ret = Forward_FP32(xi, (List>)state); + return (ret.logits.AsEnumerable(), ret.state); + } + default: + throw new NotSupportedException(); + } + } + + private (Tensor logits, IList> state) Forward_FP16(int xi, List> state) + { + _inputs.Clear(); + var input = new DenseTensor(new[] { xi }, new[] { 1 }); + _inputs.Add(NamedOnnxValue.CreateFromTensor(_input_names.First(), input)); + for (int i = 1; i < _input_names.Count; i++) + { + _inputs.Add(NamedOnnxValue.CreateFromTensor(_input_names[i], state[i - 1])); + } + var data = _inferenceSession.Run(_inputs); + return (data.First().AsTensor(), data.Skip(1).Select(x => x.AsTensor()).ToList()); + } + + private (Tensor logits, IList> state) Forward_FP32(int xi, IList> state) + { + _inputs.Clear(); + var input = new DenseTensor(new[] { xi }, new[] { 1 }); + _inputs.Add(NamedOnnxValue.CreateFromTensor(_input_names.First(), input)); + for (int i = 1; i < _input_names.Count; i++) + { + _inputs.Add(NamedOnnxValue.CreateFromTensor(_input_names[i], state[i - 1])); + } + var data = _inferenceSession.Run(_inputs); + return (data.First().AsTensor(), data.Skip(1).Select(x => x.AsTensor()).ToList()); + } + + private float HalfToSinglePrecision(ushort half) + { + uint sign = (uint)(half >> 15); + uint exponent = (uint)((half & 0x7C00) >> 10); + uint mantissa = (uint)(half & 0x03FF); + + uint singleSign = sign << 31; + uint singleExponent = (exponent + 127 - 15) << 23; + uint singleMantissa = mantissa << (23 - 10); + + uint singleFloatBits = singleSign | singleExponent | singleMantissa; + float result = BitConverter.ToSingle(BitConverter.GetBytes(singleFloatBits), 0); + + return result; + } + + private DenseTensor GDenseTensor(T value) + { + var tvalue = new DenseTensor(_embed); + for (int i2 = 0; i2 < _embed; i2++) + { + tvalue[i2] = value; + } + return tvalue; + } + } +} diff --git a/CRWKV/RWKV/Runner.cs b/CRWKV/RWKV/Runner.cs index ee4e03a..dc4cae3 100644 --- a/CRWKV/RWKV/Runner.cs +++ b/CRWKV/RWKV/Runner.cs @@ -1,94 +1,59 @@ -using Microsoft.ML.OnnxRuntime.Tensors; -using Microsoft.ML.OnnxRuntime; +using MathNet.Numerics.Distributions; +using MathNet.Numerics.LinearAlgebra; using Seq2SeqSharp.Tools; -using Seq2SeqSharp; namespace RWKV { public class Runner { - private Tokenizer _tokenizer; - private InferenceSession _inferenceSession; + private readonly OnnxModel _onnxModel; + private readonly BPEncoder _encoder; + private object _state; - private int _ctx_len = 0; - private int _n_layer = 0; - private int _n_embd = 0; - - private string _model; - - public Runner(string model, int ctx_len, int n_layer, int n_embd) + public Runner(OnnxModel onnxModel, BPEncoder encoder) { - _model = model; - _ctx_len = ctx_len; - _n_layer = n_layer; - _n_embd = n_embd; - } - - public int Init() - { - TensorAllocator.InitDevices(ProcessorTypeEnums.CPU, new int[] { 0 }); - - var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Model"); - _tokenizer = new Tokenizer(Path.Combine(path, "20B_tokenizer.json")); - - _inferenceSession = new InferenceSession(Path.Combine(path, _model)); - return _ctx_len; + _onnxModel = onnxModel; + _encoder = encoder; + _state = _onnxModel.GetEmptyStates(); } public void Run(string value, Action callBack) { - var ctx = _tokenizer.Encoder.Encode(value); - - Tensor xx_att = new DenseTensor(new[] { _n_layer, _n_embd }); - Tensor aa_att = new DenseTensor(new[] { _n_layer, _n_embd }); - Tensor bb_att = new DenseTensor(new[] { _n_layer, _n_embd }); - Tensor pp_att = new DenseTensor(new[] { _n_layer, _n_embd }); - Tensor xx_ffn = new DenseTensor(new[] { _n_layer, _n_embd }); - Tensor input = new DenseTensor(new[] { _ctx_len }); - - Queue xutput = new Queue(ctx); + var xutput = new Queue(_encoder.Encode(value)); var size = xutput.Count; - for (int i = 0; i < size + 200; i++) + var input = 0; + var strEnc = new List(); + for (int i = 0; i < size + 1024; i++) { if (xutput.Count > 0) { - input[_ctx_len - 1] = xutput.Dequeue(); + input = xutput.Dequeue(); } - var inputs = new List - { - NamedOnnxValue.CreateFromTensor("idx", input), - NamedOnnxValue.CreateFromTensor("xx_att", xx_att), - NamedOnnxValue.CreateFromTensor("aa_att", aa_att), - NamedOnnxValue.CreateFromTensor("bb_att", bb_att), - NamedOnnxValue.CreateFromTensor("pp_att", pp_att), - NamedOnnxValue.CreateFromTensor("xx_ffn", xx_ffn), - }; - var ret = _inferenceSession.Run(inputs).ToArray(); - var f = ret[0].AsTensor(); - xx_att = ret[1].AsTensor(); - aa_att = ret[2].AsTensor(); - bb_att = ret[3].AsTensor(); - pp_att = ret[4].AsTensor(); - xx_ffn = ret[5].AsTensor(); - + var logits_state = _onnxModel.Forward(input, _state); + _state = logits_state.state; if (xutput.Count == 0) { - var ac = sl(f); - - input[_ctx_len - 1] = ac; - - var ch = _tokenizer.Encoder.Decode(new[] { ac }); - callBack?.Invoke(ch); + var ac = TopPSample(logits_state.logits); + input = ac; + strEnc.Add(ac); + var str = _encoder.Decode(strEnc); + if (str == "<|endoftext|>") + break; + if (!str.Contains("\ufffd")) + { + callBack?.Invoke(str); + strEnc.Clear(); + } } } } - private int sl(Tensor out1) + private int TopPSample(IEnumerable ozut) { var graph = new ComputeGraphTensor(new WeightTensorFactory(), 0, false); - var v = out1.AsEnumerable().ToArray(); + var v = ozut.ToArray(); var w = new WeightTensor(new long[2] { 1, v.Length }, 0, 0); w.SetWeightArray(v); @@ -99,5 +64,60 @@ private int sl(Tensor out1) return (int)ret[0]; } + + public int NPSample(IEnumerable ozut, float temp = 1.0f, float top_p_usual = 0.8f) + { + // 使用MathNet.Numerics库创建一个向量。 + var vector = Vector.Build.DenseOfEnumerable(ozut); + + // 应用softmax功能。 + float maxElem = vector.Maximum(); + vector = vector.Subtract(maxElem); + vector = vector.PointwiseExp(); + float sumEXP = vector.Sum(); + vector = vector.Divide(sumEXP); + + // 计算累积概率。 + var sorted_probs = vector.OrderByDescending(x => x).ToArray(); + var cumulative_probs = new float[sorted_probs.Length]; + for (int i = 0; i < sorted_probs.Length; i++) + { + cumulative_probs[i] = (i == 0) ? sorted_probs[i] : cumulative_probs[i - 1] + sorted_probs[i]; + } + + // 查找截止点。 + float cutoff = 0; + for (int i = 0; i < sorted_probs.Length; i++) + { + if (cumulative_probs[i] > top_p_usual) + { + cutoff = sorted_probs[i]; + break; + } + } + int[] indices_below_cutoff = vector.Select((item, index) => item < cutoff ? index : -1).Where(index => index >= 0).ToArray(); + + if (indices_below_cutoff.Length > 0) + { + foreach (int index in indices_below_cutoff) + { + vector[index] = 0; + } + + vector /= vector.Sum(); + } + + if (temp != 1.0) + { + vector = vector.PointwisePower(1.0f / temp); + vector /= vector.Sum(); + } + + // 使用Categorical分布,根据调整后的概率分布选择一个随机整数。 + var categorical = new Categorical(vector.Select(x => Convert.ToDouble(x)).ToArray()); + int mout = categorical.Sample(); + + return mout; + } } } diff --git a/CRWKV/RWKV/RunnerFactory.cs b/CRWKV/RWKV/RunnerFactory.cs new file mode 100644 index 0000000..dcd93e1 --- /dev/null +++ b/CRWKV/RWKV/RunnerFactory.cs @@ -0,0 +1,37 @@ +using Seq2SeqSharp; + +namespace RWKV +{ + public class RunnerFactory + { + private Tokenizer _tokenizer; + + private int _n_layer = 0; + private int _n_embd = 0; + + private string _model; + private OnnxModel _onnxModel; + + public RunnerFactory(string model, int n_layer, int n_embd) + { + _model = model; + _n_layer = n_layer; + _n_embd = n_embd; + } + + public void Init() + { + TensorAllocator.InitDevices(ProcessorTypeEnums.CPU, new int[] { 0 }); + + var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Model"); + _tokenizer = new Tokenizer(Path.Combine(path, "20B_tokenizer.json")); + + _onnxModel = new OnnxModel(Path.Combine(path, _model), _n_embd, _n_layer); + } + + public Runner NewRunner() + { + return new Runner(_onnxModel, _tokenizer.NewEncoder()); + } + } +} diff --git a/CRWKV/RWKV/Tokenizer.cs b/CRWKV/RWKV/Tokenizer.cs index 0f5621e..4257267 100644 --- a/CRWKV/RWKV/Tokenizer.cs +++ b/CRWKV/RWKV/Tokenizer.cs @@ -67,15 +67,20 @@ public class Added_Tokens public class Tokenizer { - public BPEncoder Encoder { get; set; } + private TokenizerInfo _info; public Tokenizer(string path) { using var file = File.OpenRead(path); - var data = JsonSerializer.Deserialize(file); - if (data == null) + var info = JsonSerializer.Deserialize(file); + if (info == null) throw new NotSupportedException(); - Encoder = new BPEncoder(data); + _info = info; + } + + public BPEncoder NewEncoder() + { + return new BPEncoder(_info); } } } diff --git a/Preview/1.png b/Preview/1.png new file mode 100644 index 0000000000000000000000000000000000000000..00b19810acb78834bd5d774503c51275912b2e0f GIT binary patch literal 70108 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 KOZ(=^FaHZ#$h?dI literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 00c5393..43c05f1 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,15 @@ -### Reference Links +## Support RWKV4 Raven 1B5-14B (CPU/GPU) -* **ONNX conversion notebook**: https://colab.research.google.com/github/josephrocca/rwkv-v4-web/blob/main/RWKV_v4_ONNX_conversion.ipynb -* **Hugging Face repo**: https://huggingface.co/rocca/rwkv-4-pile-web +[Onnx Download](https://github.com/imxcstar/CSharp-RWKV-V4/releases) + +## Preview + +![1.png](/Preview/1.png) + +## Reference Links + +* **Hugging Face repo**: https://huggingface.co/BlinkDL/rwkv-4-raven +* https://github.com/harrisonvanderbyl/rwkv-onnx * https://github.com/BlinkDL/RWKV-LM -* https://github.com/josephrocca/rwkv-v4-web -* https://github.com/Alex1911-Jiang/GPT-3-Encoder-Sharp +* https://github.com/BlinkDL/ChatRWKV +* https://github.com/Alex1911-Jiang/GPT-3-Encoder-Sharp \ No newline at end of file