From 78cc678a60c83dfa5838a7b1bc62808f7d248304 Mon Sep 17 00:00:00 2001 From: icpp Date: Mon, 25 Sep 2023 18:49:09 -0400 Subject: [PATCH] Initial backend for ICGPT Labs --- .clang-format | 137 +++ .github/trigger.txt | 2 + .github/workflows/cicd.yml | 77 ++ .gitignore | 151 +++ .mypy.ini | 13 + .pylintrc | 585 ++++++++++ Makefile | 171 +++ README.md | 36 + __init__.py | 0 assets/icpp-llm-logo.png | Bin 0 -> 166154 bytes assets/icpp_llama2_without_limits.png | Bin 0 -> 219356 bytes icpp_llama2/README.md | 84 ++ ...EADME_icpp_llama2_resource_requirements.md | 71 ++ icpp_llama2/canister_ids.json | 5 + icpp_llama2/demo.ps1 | 126 ++ icpp_llama2/demo.sh | 104 ++ icpp_llama2/demo1-ic.sh | 25 + icpp_llama2/demo1.sh | 25 + icpp_llama2/demo2-ic.sh | 29 + icpp_llama2/demo2.sh | 29 + icpp_llama2/dfx.json | 16 + icpp_llama2/icpp.toml | 18 + icpp_llama2/native/main.cpp | 642 +++++++++++ icpp_llama2/native/main.h | 2 + icpp_llama2/requirements.txt | 3 + icpp_llama2/scripts/__init__.py | 0 icpp_llama2/scripts/ic_py_canister.py | 98 ++ icpp_llama2/scripts/icpp_llama2_sizer.py | 266 +++++ icpp_llama2/scripts/parse_args.py | 68 ++ icpp_llama2/scripts/requirements.txt | 19 + icpp_llama2/scripts/upload.py | 231 ++++ icpp_llama2/src/canister.cpp | 79 ++ icpp_llama2/src/canister.h | 14 + icpp_llama2/src/chats.cpp | 147 +++ icpp_llama2/src/chats.h | 51 + icpp_llama2/src/http.cpp | 5 + icpp_llama2/src/http.h | 79 ++ icpp_llama2/src/inference.cpp | 235 ++++ icpp_llama2/src/inference.h | 6 + icpp_llama2/src/initialize.cpp | 214 ++++ icpp_llama2/src/initialize.h | 9 + icpp_llama2/src/llama2.did | 56 + icpp_llama2/src/run.c | 1018 +++++++++++++++++ icpp_llama2/src/run.h | 141 +++ icpp_llama2/src/upload.cpp | 159 +++ icpp_llama2/src/upload.h | 27 + icpp_llama2/src/users.cpp | 64 ++ icpp_llama2/src/users.h | 9 + icpp_llama2/test/__init__.py | 0 icpp_llama2/test/conftest.py | 8 + icpp_llama2/test/test_apis.py | 213 ++++ icpp_llama2/tokenizers/__init__.py | 0 icpp_llama2/tokenizers/tokenizer.bin | Bin 0 -> 432717 bytes requirements.txt | 6 + test_all_llms.ps1 | 22 + version_clang.txt | 1 + 56 files changed, 5596 insertions(+) create mode 100644 .clang-format create mode 100644 .github/trigger.txt create mode 100644 .github/workflows/cicd.yml create mode 100644 .gitignore create mode 100644 .mypy.ini create mode 100755 .pylintrc create mode 100644 Makefile create mode 100644 README.md create mode 100644 __init__.py create mode 100644 assets/icpp-llm-logo.png create mode 100644 assets/icpp_llama2_without_limits.png create mode 100644 icpp_llama2/README.md create mode 100644 icpp_llama2/README_icpp_llama2_resource_requirements.md create mode 100644 icpp_llama2/canister_ids.json create mode 100644 icpp_llama2/demo.ps1 create mode 100755 icpp_llama2/demo.sh create mode 100755 icpp_llama2/demo1-ic.sh create mode 100755 icpp_llama2/demo1.sh create mode 100755 icpp_llama2/demo2-ic.sh create mode 100755 icpp_llama2/demo2.sh create mode 100644 icpp_llama2/dfx.json create mode 100644 icpp_llama2/icpp.toml create mode 100644 icpp_llama2/native/main.cpp create mode 100644 icpp_llama2/native/main.h create mode 100644 icpp_llama2/requirements.txt create mode 100644 icpp_llama2/scripts/__init__.py create mode 100644 icpp_llama2/scripts/ic_py_canister.py create mode 100644 icpp_llama2/scripts/icpp_llama2_sizer.py create mode 100644 icpp_llama2/scripts/parse_args.py create mode 100644 icpp_llama2/scripts/requirements.txt create mode 100644 icpp_llama2/scripts/upload.py create mode 100644 icpp_llama2/src/canister.cpp create mode 100644 icpp_llama2/src/canister.h create mode 100644 icpp_llama2/src/chats.cpp create mode 100644 icpp_llama2/src/chats.h create mode 100644 icpp_llama2/src/http.cpp create mode 100644 icpp_llama2/src/http.h create mode 100644 icpp_llama2/src/inference.cpp create mode 100644 icpp_llama2/src/inference.h create mode 100644 icpp_llama2/src/initialize.cpp create mode 100644 icpp_llama2/src/initialize.h create mode 100644 icpp_llama2/src/llama2.did create mode 100644 icpp_llama2/src/run.c create mode 100644 icpp_llama2/src/run.h create mode 100644 icpp_llama2/src/upload.cpp create mode 100644 icpp_llama2/src/upload.h create mode 100644 icpp_llama2/src/users.cpp create mode 100644 icpp_llama2/src/users.h create mode 100644 icpp_llama2/test/__init__.py create mode 100644 icpp_llama2/test/conftest.py create mode 100644 icpp_llama2/test/test_apis.py create mode 100644 icpp_llama2/tokenizers/__init__.py create mode 100644 icpp_llama2/tokenizers/tokenizer.bin create mode 100644 requirements.txt create mode 100644 test_all_llms.ps1 create mode 100644 version_clang.txt diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..92170f8 --- /dev/null +++ b/.clang-format @@ -0,0 +1,137 @@ +--- +Language: Cpp +# BasedOnStyle: LLVM +AccessModifierOffset: -2 +AlignAfterOpenBracket: Align +AlignConsecutiveMacros: false +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +AlignEscapedNewlines: Right +AlignOperands: true +AlignTrailingComments: true +AllowAllArgumentsOnNextLine: true +AllowAllConstructorInitializersOnNextLine: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: Never +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: All +AllowShortLambdasOnASingleLine: All +AllowShortIfStatementsOnASingleLine: AllIfsAndElse +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: MultiLine +BinPackArguments: true +BinPackParameters: true +BraceWrapping: + AfterCaseLabel: false + AfterClass: false + AfterControlStatement: false + AfterEnum: false + AfterFunction: false + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + AfterExternBlock: false + BeforeCatch: false + BeforeElse: false + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +BreakBeforeBinaryOperators: None +BreakBeforeBraces: Attach +BreakBeforeInheritanceComma: false +BreakInheritanceList: BeforeColon +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeColon +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: false +ColumnLimit: 80 +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: false +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DeriveLineEnding: true +DerivePointerAlignment: false +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: true +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IncludeBlocks: Preserve +IncludeCategories: + - Regex: '^"(llvm|llvm-c|clang|clang-c)/' + Priority: 2 + SortPriority: 0 + - Regex: '^(<|"(gtest|gmock|isl|json)/)' + Priority: 3 + SortPriority: 0 + - Regex: '.*' + Priority: 1 + SortPriority: 0 +IncludeIsMainRegex: '(Test)?$' +IncludeIsMainSourceRegex: '' +IndentCaseLabels: false +IndentGotoLabels: true +IndentPPDirectives: None +IndentWidth: 2 +IndentWrappedFunctionNames: false +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: true +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None +ObjCBinPackProtocolList: Auto +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyBreakTemplateDeclaration: 10 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 60 +PointerAlignment: Right +ReflowComments: false +SortIncludes: true +SortUsingDeclarations: true +SpaceAfterCStyleCast: false +SpaceAfterLogicalNot: false +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeCpp11BracedList: false +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true +SpaceBeforeParens: ControlStatements +SpaceBeforeRangeBasedForLoopColon: true +SpaceInEmptyBlock: false +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInConditionalStatement: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +SpaceBeforeSquareBrackets: false +Standard: Latest +StatementMacros: + - Q_UNUSED + - QT_REQUIRE_VERSION +TabWidth: 2 +UseCRLF: false +UseTab: Never +--- + diff --git a/.github/trigger.txt b/.github/trigger.txt new file mode 100644 index 0000000..3b91f12 --- /dev/null +++ b/.github/trigger.txt @@ -0,0 +1,2 @@ +# A dummy file to trigger the workflow without making any actual change. +# Just change something arbitrary in this line, like a space . \ No newline at end of file diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml new file mode 100644 index 0000000..16d4409 --- /dev/null +++ b/.github/workflows/cicd.yml @@ -0,0 +1,77 @@ +name: cicd + +on: + workflow_dispatch: + push: + paths: + - "icpp_llama2/**" + - "Makefile" + - ".github/trigger.txt" + - ".github/workflows/cicd.yml" + +env: + PYTHON_VERSION: 3.11 + +jobs: + all: + name: all + runs-on: ubuntu-latest + steps: + # https://github.com/marketplace/actions/setup-miniconda + - uses: conda-incubator/setup-miniconda@v2 + with: + python-version: ${{ env.PYTHON_VERSION }} + + # ------------------------------------------------------------------- + # Checkout icpp-llm + - name: checkout icpp-llm + uses: actions/checkout@v3 + with: + fetch-depth: 0 + # ------------------------------------------------------------------- + + - name: install + shell: bash -l {0} # activates the default conda environment ('test') + run: | + echo "Installing tool chains & dependencies" + pwd + sudo apt-get update + sudo apt-get install build-essential + make summary + make install-dfx + make install-python + make install-clang-ubuntu + make install-jp + + - name: versions + shell: bash -l {0} + run: | + echo "icpp --version: $(icpp --version)" + echo "clang++ --version: $(clang++ --version)" + echo "g++ --version: $(g++ --version)" + echo "pip version : $(pip --version)" + echo "python version : $(python --version)" + echo "jp version : $(jp --version)" + echo "dfx version : $(dfx --version)" + echo "Ensure conda works properly" + conda info + which pip + which python + which icpp + + - name: install-wasi-sdk + shell: bash -l {0} + run: | + echo "Installing wasi-sdk" + icpp install-wasi-sdk + + - name: download models + shell: bash -l {0} + run: | + make icpp_llama2_get_stories15M + make icpp_llama2_get_stories260K + + - name: all-tests + shell: bash -l {0} + run: | + make all-tests diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ec63472 --- /dev/null +++ b/.gitignore @@ -0,0 +1,151 @@ +# Misc +x +y +z +paths.txt +.*.swp +.DS_Store +secret + +# llama2 models +models +stories260K + +# llama2 metrics +etl + +# Windows +.vs +CppProperties.json + +# Internet Computer +.dfx + +# Javascript bindings +declarations + +# C++ +null.d +*.observed +*.observed.filtered +*.wasm +*.wat +a.out +*.exe +build-native-unit/ +build-native/ + +# PyPI packaging +.pypirc + +# Wing IDE +*.wpr +*.wpu + +# VS Code +.vscode + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ diff --git a/.mypy.ini b/.mypy.ini new file mode 100644 index 0000000..9f2e60d --- /dev/null +++ b/.mypy.ini @@ -0,0 +1,13 @@ +# https://mypy.readthedocs.io/en/latest/config_file.html#config-file +# (-) python -m mypy --config-file FILENAME ... + +# Global options: +[mypy] +disallow_untyped_calls = True +disallow_untyped_defs = True +disallow_incomplete_defs = True +check_untyped_defs = True +disallow_untyped_decorators = True +show_error_codes = True +warn_redundant_casts = True +warn_unused_ignores = True \ No newline at end of file diff --git a/.pylintrc b/.pylintrc new file mode 100755 index 0000000..7da9488 --- /dev/null +++ b/.pylintrc @@ -0,0 +1,585 @@ +[MASTER] + +#ICPP: https://docs.pylint.org/en/1.6.0/run.html#command-line-options +#ICPP: (-) python -m pylint --rc-file=FILENAME ... + +#ICPP: To avoid conflicts with black: +#ICPP: (-) https://black.readthedocs.io/en/stable/compatible_configs.html#pylint +#ICPP: bad-continuation (C0330), bad-whitespace (C0326) + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code. +extension-pkg-whitelist=PyQt5, PySide6, pydantic + +# Add files or directories to the blacklist. They should be base names, not +# paths. +ignore=CVS + +# Add files or directories matching the regex patterns to the blacklist. The +# regex matches against base names, not paths. +ignore-patterns= + +# Python code to execute, usually for sys.path manipulation such as +# pygtk.require(). +#ICPP: ################################################################################################################ +#ICPP: (-) Increase recursion limit (https://stackoverflow.com/a/45746975/5480536) +#ICPP: +#ICPP: (-) A print statement to help users verify that pylint is using correct python environment. +#ICPP: Especially when you run from anaconda environments or virtual environments, you might get these type of errors: +#ICPP: E0401: Unable to import 'keras' (import-error) +#ICPP: If you do, run pylint as a module, not as a script, with: +#ICPP: $ python -m pylint ....... +#ICPP: ################################################################################################################ +#init-hook= +init-hook='import os, sys, site; sys.setrecursionlimit(8 * sys.getrecursionlimit())' +#init-hook='import os, sys, site; sys.setrecursionlimit(8 * sys.getrecursionlimit()); print(f"---------------------\nAs detected by init-hook in .pylintrc\n\npylint is using this python environment:\n\n-sys.path:{sys.path}\n\n-site packages:{site.getsitepackages()}\n\nSee project README for details how to fix if this is incorrect.\n---------------------")' + + +# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the +# number of processors available to use. +jobs=1 + +# Control the amount of potential inferred values when inferring a single +# object. This can help the performance when dealing with large functions or +# complex, nested conditions. +limit-inference-results=100 + +# List of plugins (as comma separated values of python modules names) to load, +# usually to register additional checkers. +load-plugins= + +# Pickle collected data for later comparisons. +persistent=yes + +# Specify a configuration file. +#rcfile= + +# When enabled, pylint would attempt to guess common misconfiguration and emit +# user-friendly hints instead of false-positive error messages. +suggestion-mode=yes + +# Allow loading of arbitrary C extensions. Extensions are imported into the +# active Python interpreter and may run arbitrary code. +unsafe-load-any-extension=no + + +[MESSAGES CONTROL] + +# Only show warnings with the listed confidence levels. Leave empty to show +# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED. +confidence= + +# Disable the message, report, category or checker with the given id(s). You +# can either give multiple identifiers separated by comma (,) or put this +# option multiple times (only on the command line, not in the configuration +# file where it should appear only once). You can also use "--disable=all" to +# disable everything first and then reenable specific checks. For example, if +# you want to run only the similarities checker, you can use "--disable=all +# --enable=similarities". If you want to run only the classes checker, but have +# no Warning level messages displayed, use "--disable=all --enable=classes +# --disable=W". +disable=print-statement, + parameter-unpacking, + unpacking-in-except, + old-raise-syntax, + backtick, + long-suffix, + old-ne-operator, + old-octal-literal, + import-star-module-level, + non-ascii-bytes-literal, + raw-checker-failed, + bad-inline-option, + locally-disabled, + locally-enabled, + file-ignored, + suppressed-message, + useless-suppression, + deprecated-pragma, + use-symbolic-message-instead, + apply-builtin, + basestring-builtin, + buffer-builtin, + cmp-builtin, + coerce-builtin, + execfile-builtin, + file-builtin, + long-builtin, + raw_input-builtin, + reduce-builtin, + standarderror-builtin, + unicode-builtin, + xrange-builtin, + coerce-method, + delslice-method, + getslice-method, + setslice-method, + no-absolute-import, + old-division, + dict-iter-method, + dict-view-method, + next-method-called, + metaclass-assignment, + indexing-exception, + raising-string, + reload-builtin, + oct-method, + hex-method, + nonzero-method, + cmp-method, + input-builtin, + round-builtin, + intern-builtin, + unichr-builtin, + map-builtin-not-iterating, + zip-builtin-not-iterating, + range-builtin-not-iterating, + filter-builtin-not-iterating, + using-cmp-argument, + eq-without-hash, + div-method, + idiv-method, + rdiv-method, + exception-message-attribute, + invalid-str-codec, + sys-max-int, + bad-python3-import, + deprecated-string-function, + deprecated-str-translate-call, + deprecated-itertools-function, + deprecated-types-field, + next-method-defined, + dict-items-not-iterating, + dict-keys-not-iterating, + dict-values-not-iterating, + deprecated-operator-function, + deprecated-urllib-function, + xreadlines-attribute, + deprecated-sys-function, + exception-escape, + comprehension-escape, + bare-except, too-many-arguments, too-many-instance-attributes, + too-many-branches, too-many-locals, + bad-continuation, bad-whitespace, + logging-fstring-interpolation, + duplicate-code, fixme +#ICPP: I started adding with 'bare-except' + +# Enable the message, report, category or checker with the given id(s). You can +# either give multiple identifier separated by comma (,) or put this option +# multiple time (only on the command line, not in the configuration file where +# it should appear only once). See also the "--disable" option for examples. +enable=c-extension-no-member + + +[REPORTS] + +# Python expression which should return a note less than 10 (10 is the highest +# note). You have access to the variables errors warning, statement which +# respectively contain the number of errors / warnings messages and the total +# number of statements analyzed. This is used by the global evaluation report +# (RP0004). +evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) + +# Template used to display messages. This is a python new-style format string +# used to format the message information. See doc for all details. +#msg-template= + +# Set the output format. Available formats are text, parseable, colorized, json +# and msvs (visual studio). You can also give a reporter class, e.g. +# mypackage.mymodule.MyReporterClass. +output-format=text + +# Tells whether to display a full report or only the messages. +reports=no + +# Activate the evaluation score. +score=yes + + +[REFACTORING] + +# Maximum number of nested blocks for function / method body +max-nested-blocks=5 + +# Complete name of functions that never returns. When checking for +# inconsistent-return-statements if a never returning function is called then +# it will be considered as an explicit return statement and no message will be +# printed. +never-returning-functions=sys.exit + + +[BASIC] + +# Naming style matching correct argument names. +argument-naming-style=snake_case + +# Regular expression matching correct argument names. Overrides argument- +# naming-style. +#argument-rgx= + +# Naming style matching correct attribute names. +attr-naming-style=snake_case + +# Regular expression matching correct attribute names. Overrides attr-naming- +# style. +#attr-rgx= + +# Bad variable names which should always be refused, separated by a comma. +bad-names=foo, + bar, + baz, + toto, + tutu, + tata + +# Naming style matching correct class attribute names. +class-attribute-naming-style=any + +# Regular expression matching correct class attribute names. Overrides class- +# attribute-naming-style. +#class-attribute-rgx= + +# Naming style matching correct class names. +class-naming-style=PascalCase + +# Regular expression matching correct class names. Overrides class-naming- +# style. +#class-rgx= + +# Naming style matching correct constant names. +const-naming-style=UPPER_CASE + +# Regular expression matching correct constant names. Overrides const-naming- +# style. +#const-rgx= + +# Minimum line length for functions/classes that require docstrings, shorter +# ones are exempt. +docstring-min-length=-1 + +# Naming style matching correct function names. +function-naming-style=snake_case + +# Regular expression matching correct function names. Overrides function- +# naming-style. +#function-rgx= + +# Good variable names which should always be accepted, separated by a comma. +good-names=a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, + A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, + ex, + Run, + _, + df, s3, pp, ax, sc, spark, w3, tx, to +#ICPP: + +# Include a hint for the correct naming format with invalid-name. +include-naming-hint=no + +# Naming style matching correct inline iteration names. +inlinevar-naming-style=any + +# Regular expression matching correct inline iteration names. Overrides +# inlinevar-naming-style. +#inlinevar-rgx= + +# Naming style matching correct method names. +method-naming-style=snake_case + +# Regular expression matching correct method names. Overrides method-naming- +# style. +#method-rgx= + +# Naming style matching correct module names. +module-naming-style=snake_case + +# Regular expression matching correct module names. Overrides module-naming- +# style. +#module-rgx= + +# Colon-delimited sets of names that determine each other's naming style when +# the name regexes allow several styles. +name-group= + +# Regular expression which should only match function or class names that do +# not require a docstring. +no-docstring-rgx=^_ + +# List of decorators that produce properties, such as abc.abstractproperty. Add +# to this list to register other decorators that produce valid properties. +# These decorators are taken in consideration only for invalid-name. +property-classes=abc.abstractproperty + +# Naming style matching correct variable names. +variable-naming-style=snake_case + +# Regular expression matching correct variable names. Overrides variable- +# naming-style. +#variable-rgx= + + +[LOGGING] + +# Logging modules to check that the string format arguments are in logging +# function parameter format. +logging-modules=logging + + +[SPELLING] + +# Limits count of emitted suggestions for spelling mistakes. +max-spelling-suggestions=4 + +# Spelling dictionary name. Available dictionaries: none. To make it working +# install python-enchant package.. +spelling-dict= + +# List of comma separated words that should not be checked. +spelling-ignore-words= + +# A path to a file that contains private dictionary; one word per line. +spelling-private-dict-file= + +# Tells whether to store unknown words to indicated private dictionary in +# --spelling-private-dict-file option instead of raising a message. +spelling-store-unknown-words=no + + +[SIMILARITIES] + +# Ignore comments when computing similarities. +ignore-comments=yes + +# Ignore docstrings when computing similarities. +ignore-docstrings=yes + +# Ignore imports when computing similarities. +ignore-imports=no + +# Minimum lines number of a similarity. +min-similarity-lines=4 + + +[TYPECHECK] + +# List of decorators that produce context managers, such as +# contextlib.contextmanager. Add to this list to register other decorators that +# produce valid context managers. +contextmanager-decorators=contextlib.contextmanager + +# List of members which are set dynamically and missed by pylint inference +# system, and so shouldn't trigger E1101 when accessed. Python regular +# expressions are accepted. +generated-members= + +# Tells whether missing members accessed in mixin class should be ignored. A +# mixin class is detected if its name ends with "mixin" (case insensitive). +ignore-mixin-members=yes + +# Tells whether to warn about missing members when the owner of the attribute +# is inferred to be None. +ignore-none=yes + +# This flag controls whether pylint should warn about no-member and similar +# checks whenever an opaque object is returned when inferring. The inference +# can return multiple potential results while evaluating a Python object, but +# some branches might not be evaluated, which results in partial inference. In +# that case, it might be useful to still emit no-member and other checks for +# the rest of the inferred objects. +ignore-on-opaque-inference=yes + +# List of class names for which member attributes should not be checked (useful +# for classes with dynamically set attributes). This supports the use of +# qualified names. +ignored-classes=optparse.Values,thread._local,_thread._local,numpy.random,matplotlib.cm + +# List of module names for which member attributes should not be checked +# (useful for modules/projects where namespaces are manipulated during runtime +# and thus existing member attributes cannot be deduced by static analysis. It +# supports qualified module names, as well as Unix pattern matching. +ignored-modules= + +# Show a hint with possible names when a member name was not found. The aspect +# of finding the hint is based on edit distance. +missing-member-hint=yes + +# The minimum edit distance a name should have in order to be considered a +# similar match for a missing member name. +missing-member-hint-distance=1 + +# The total number of similar names that should be taken in consideration when +# showing a hint for a missing member. +missing-member-max-choices=1 + + +[VARIABLES] + +# List of additional names supposed to be defined in builtins. Remember that +# you should avoid to define new builtins when possible. +additional-builtins= + +# Tells whether unused global variables should be treated as a violation. +allow-global-unused-variables=yes + +# List of strings which can identify a callback function by name. A callback +# name must start or end with one of those strings. +callbacks=cb_, + _cb + +# A regular expression matching the name of dummy variables (i.e. expected to +# not be used). +dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ + +# Argument names that match this expression will be ignored. Default to name +# with leading underscore. +ignored-argument-names=_.*|^ignored_|^unused_ + +# Tells whether we should check for unused import in __init__ files. +init-import=no + +# List of qualified module names which can have objects that can redefine +# builtins. +redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io + + +[MISCELLANEOUS] + +# List of note tags to take in consideration, separated by a comma. +notes=FIXME, + XXX, + TODO + + +[FORMAT] + +# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. +expected-line-ending-format= + +# Regexp for a line that is allowed to be longer than the limit. +ignore-long-lines=^\s*(# )??$ + +# Number of spaces of indent required inside a hanging or continued line. +indent-after-paren=4 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string=' ' + +# Maximum number of characters on a single line. +max-line-length=89 + +# Maximum number of lines in a module. +max-module-lines=2000 + +# List of optional constructs for which whitespace checking is disabled. `dict- +# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}. +# `trailing-comma` allows a space between comma and closing bracket: (a, ). +# `empty-line` allows space-only lines. +no-space-check=trailing-comma, + dict-separator + +# Allow the body of a class to be on the same line as the declaration if body +# contains single statement. +single-line-class-stmt=no + +# Allow the body of an if to be on the same line as the test if there is no +# else. +single-line-if-stmt=no + + +[IMPORTS] + +# Allow wildcard imports from modules that define __all__. +allow-wildcard-with-all=no + +# Analyse import fallback blocks. This can be used to support both Python 2 and +# 3 compatible code, which means that the block might have code that exists +# only in one or another interpreter, leading to false positives when analysed. +analyse-fallback-blocks=no + +# Deprecated modules which should not be used, separated by a comma. +deprecated-modules=optparse,tkinter.tix + +# Create a graph of external dependencies in the given file (report RP0402 must +# not be disabled). +ext-import-graph= + +# Create a graph of every (i.e. internal and external) dependencies in the +# given file (report RP0402 must not be disabled). +import-graph= + +# Create a graph of internal dependencies in the given file (report RP0402 must +# not be disabled). +int-import-graph= + +# Force import order to recognize a module as part of the standard +# compatibility libraries. +known-standard-library= + +# Force import order to recognize a module as part of a third party library. +known-third-party=enchant + + +[CLASSES] + +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods=__init__, + __new__, + setUp + +# List of member names, which should be excluded from the protected access +# warning. +exclude-protected=_asdict, + _fields, + _replace, + _source, + _make + +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg=cls + +# List of valid names for the first argument in a metaclass class method. +valid-metaclass-classmethod-first-arg=cls + + +[DESIGN] + +# Maximum number of arguments for function / method. +max-args=5 + +# Maximum number of attributes for a class (see R0902). +max-attributes=7 + +# Maximum number of boolean expressions in an if statement. +max-bool-expr=5 + +# Maximum number of branch for function / method body. +max-branches=12 + +# Maximum number of locals for function / method body. +max-locals=15 + +# Maximum number of parents for a class (see R0901). +max-parents=7 + +# Maximum number of public methods for a class (see R0904). +max-public-methods=20 + +# Maximum number of return / yield for function / method body. +max-returns=6 + +# Maximum number of statements in function / method body. +#max-statements=50 +max-statements=100 + +# Minimum number of public methods for a class (see R0903). +min-public-methods=2 + + +[EXCEPTIONS] + +# Exceptions that will emit a warning when being caught. Defaults to +# "Exception". +overgeneral-exceptions=Exception diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..cb6a926 --- /dev/null +++ b/Makefile @@ -0,0 +1,171 @@ +SHELL := /bin/bash + +# Disable built-in rules and variables +MAKEFLAGS += --no-builtin-rules +MAKEFLAGS += --no-builtin-variables + +NETWORK := local + +########################################################################### +# OS we're running on +ifeq ($(OS),Windows_NT) + detected_OS := Windows +else + detected_OS := $(shell sh -c 'uname 2>/dev/null || echo Unknown') +endif + +ifeq ($(detected_OS),Darwin) # Mac OS X (Intel) + OS += macos + DIDC += didc-macos +endif +ifeq ($(detected_OS),Linux) # Ubuntu + OS += linux + DIDC += didc-linux64 +endif + +ifeq ($(detected_OS),Windows_NT) # Windows (icpp supports it but you cannot run this Makefile) + OS += windows_cannot_run_make +endif +ifeq ($(detected_OS),Unknown) # Unknown + OS += unknown +endif + +########################################################################### +# latest release of didc +VERSION_DIDC := $(shell curl --silent "https://api.github.com/repos/dfinity/candid/releases/latest" | grep -e '"tag_name"' | cut -c 16-25) +# version to install for clang +VERSION_CLANG := $(shell cat version_clang.txt) + +########################################################################### +# Use some clang tools that come with wasi-sdk +ICPP_COMPILER_ROOT := $(HOME)/.icpp/wasi-sdk-20.0 +CLANG_FORMAT = $(ICPP_COMPILER_ROOT)/bin/clang-format +CLANG_TIDY = $(ICPP_COMPILER_ROOT)/bin/clang-tidy + + +########################################################################### +# CI/CD - Phony Makefile targets +# +.PHONY: all-tests +all-tests: all-static test-all-llms + +.PHONY: icpp_llama2_get_stories260K +icpp_llama2_get_stories260K: + cd icpp_llama2 && \ + mkdir -p stories260K && \ + wget -P stories260K https://huggingface.co/karpathy/tinyllamas/resolve/main/stories260K/stories260K.bin && \ + wget -P stories260K https://huggingface.co/karpathy/tinyllamas/resolve/main/stories260K/tok512.bin + +.PHONY: icpp_llama2_get_stories15M +icpp_llama2_get_stories15M: + cd icpp_llama2 && \ + mkdir -p models && \ + wget -P models https://huggingface.co/karpathy/tinyllamas/resolve/main/stories15M.bin + +.PHONY: summary +summary: + @echo "-------------------------------------------------------------" + @echo OS=$(OS) + @echo VERSION_DIDC=$(VERSION_DIDC) + @echo VERSION_CLANG=$(VERSION_CLANG) + @echo CLANG_FORMAT=$(CLANG_FORMAT) + @echo CLANG_TIDY=$(CLANG_TIDY) + @echo ICPP_COMPILER_ROOT=$(ICPP_COMPILER_ROOT) + @echo "-------------------------------------------------------------" + +.PHONY: test-all-llms +test-all-llms: + dfx identity use default + @echo "#########################################" + @echo "####### testing icpp_llama2 #############" + @echo "#########################################" + cd icpp_llama2 && \ + icpp build-native && \ + ./build-native/mockic.exe && \ + ./demo.sh && \ + pytest && \ + dfx stop + +.PHONY: all-static +all-static: \ + cpp-format cpp-lint \ + python-format python-lint python-type + +CPP_AND_H_FILES = $(shell ls \ +icpp_llama2/src/*.cpp icpp_llama2/src/*.h \ +icpp_llama2/native/*.cpp icpp_llama2/native/*.h) + +.PHONY: cpp-format +cpp-format: + @echo "---" + @echo "cpp-format" + $(CLANG_FORMAT) --style=file --verbose -i $(CPP_AND_H_FILES) + +.PHONY: cpp-lint +cpp-lint: + @echo "---" + @echo "cpp-lint" + @echo "TO IMPLEMENT with clang-tidy" + +PYTHON_DIRS ?= icpp_llama2 + +.PHONY: python-format +python-format: + @echo "---" + @echo "python-format" + python -m black $(PYTHON_DIRS) + +.PHONY: python-lint +python-lint: + @echo "---" + @echo "python-lint" + python -m pylint --jobs=0 --rcfile=.pylintrc $(PYTHON_DIRS) + +.PHONY: python-type +python-type: + @echo "---" + @echo "python-type" + python -m mypy --config-file .mypy.ini --show-column-numbers --strict --explicit-package-bases $(PYTHON_DIRS) + + +########################################################################### +# Toolchain installation for .github/workflows + +.PHONY: install-clang-ubuntu +install-clang-ubuntu: + @echo "Installing clang-$(VERSION_CLANG) compiler" + sudo apt-get remove python3-lldb-14 + wget https://apt.llvm.org/llvm.sh + chmod +x llvm.sh + echo | sudo ./llvm.sh $(VERSION_CLANG) + rm llvm.sh + + @echo "Creating soft links for compiler executables" + sudo ln --force -s /usr/bin/clang-$(VERSION_CLANG) /usr/bin/clang + sudo ln --force -s /usr/bin/clang++-$(VERSION_CLANG) /usr/bin/clang++ + +# This installs ~/bin/dfx +# Make sure to source ~/.profile afterwards -> it adds ~/bin to the path if it exists +.PHONY: install-dfx +install-dfx: + sh -ci "$$(curl -fsSL https://sdk.dfinity.org/install.sh)" + +.PHONY: install-didc +install-didc: + @echo "Installing didc $(VERSION_DIDC) ..." + sudo rm -rf /usr/local/bin/didc + wget https://github.com/dfinity/candid/releases/download/${VERSION_DIDC}/$(DIDC) + sudo mv $(DIDC) /usr/local/bin/didc + chmod +x /usr/local/bin/didc + @echo " " + @echo "Installed successfully in:" + @echo /usr/local/bin/didc + +.PHONY: install-jp +install-jp: + sudo apt-get update && sudo apt-get install jp + +.PHONY: install-python +install-python: + pip install --upgrade pip + pip install -r requirements.txt \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..2842dcb --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +[![icpp-llm](https://github.com/icppWorld/icpp-llm/actions/workflows/cicd.yml/badge.svg)](https://github.com/icppWorld/icpp-llm/actions/workflows/cicd.yml) + +# LLMs for the Internet Computer +Try it out in [ICGPT Labs](https://icgpt.icpp.world) ! + +*The LLMs of this repo run inside it's back-end canisters.* + +![icpp-llm logo](./assets/icpp-llm-logo.png) + +# The Benefits of Running LLMs On-Chain + +The canisters within the Internet Computer have certain constraints. They come with memory restrictions, and there's a cap on the number of instructions one can execute per message, as discussed [here](https://forum.dfinity.org/t/instruction-limit-is-crushing-me/22070/10?u=icpp). + +This might lead one to question the rationale behind operating an LLM within an Internet Computer's canister. + +For me, the primary incentive is the unparalleled simplicity of using the IC in comparison to conventional cloud platforms. You develop, deploy & test using a local replica of the cloud, and when everything is ready, you deploy it to the IC with just one command. Everything becomes instantly and securely accessible online. You can very easily restrict access to the endpoints in case you don't want to make it fully public yet and want to share it with a smaller group instead. + +Thanks to the Internet Computer's foundational cryptographic and blockchain technologies, concerns related to IT and security vanish. It's truly remarkable. + +With such user-friendliness, the IC canister runtime serves as an ideal environment for my research pursuits. It complements the type of research presented in this paper that offers a dataset designed to boost the creation, examination, and study of Language Models for areas with scarce resources or specific niches: + + > [TinyStories: How Small Can Language Models Be and Still Speak +Coherent English?](https://arxiv.org/pdf/2305.07759.pdf) + +Besides the ease of use and the enhanced security, running LLMs directly on-chain also facilitates a seamless integration of tokenomics, eliminating the need to juggle between a complex blend of web3 and web2 components, and I believe it will lead to a new category of Generative AI based dApps. + + +## Instructions + +See the README in the icpp_llama2 folder + + +## Support + +For support, kindly create a GitHub Issue as outlined in the [Support](https://docs.icpp.world/support.html) documentation page. + \ No newline at end of file diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/assets/icpp-llm-logo.png b/assets/icpp-llm-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..39eb05e2e6b26777e8c55c53f42feabab514c655 GIT binary patch literal 166154 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 z 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

QP37PEgp6N?9!uoC! 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 literal 0 HcmV?d00001 diff --git a/icpp_llama2/README.md b/icpp_llama2/README.md new file mode 100644 index 0000000..1acd3a3 --- /dev/null +++ b/icpp_llama2/README.md @@ -0,0 +1,84 @@ +# [karpathy/llama2.c](https://github.com/karpathy/llama2.c) for the Internet Computer + +# Instructions + +- Install the C++ development environment for the Internet Computer ([docs](https://docs.icpp.world/installation.html)): + - Install the required python packages *(icpp-pro & ic-py)*: + ```bash + pip install -r requirements.txt + ``` + - Install the [wasi-sdk](https://github.com/WebAssembly/wasi-sdk) compiler: + ```bash + icpp install-wasi-sdk + ``` + - Install dfx: + ```bash + sh -ci "$(curl -fsSL https://internetcomputer.org/install.sh)" + ``` + *(Note: On Windows, just install dfx in wsl, and icpp-pro in PowerShell will know where to find it. )* + + +- Get a model checkpoint, as explained in [karpathy/llama2.c](https://github.com/karpathy/llama2.c): + + This command downloads the 15M parameter model that was trained on the TinyStories dataset (~60MB download) and stores it in a `models` folder: + + ```bash + # on Linux/Mac + mkdir -p models + wget -P models https://huggingface.co/karpathy/tinyllamas/resolve/main/stories15M.bin + ``` + + ```powershell + # in Windows PowerShell (Miniconda recommended) + if (-not (Test-Path -Path .\models)) { + New-Item -Path .\models -ItemType Directory + } + Invoke-WebRequest -Uri https://huggingface.co/karpathy/tinyllamas/resolve/main/stories15M.bin -OutFile .\models\stories15M.bin + ``` + +- The *demo* script starts the local network, deploys llama2, uploads the model & tokenizer, and generates two stories: + - `./demo.sh` , on Linux / Mac + - `.\demo.ps1` , in Windows PowerShell (Miniconda recommended) + +​ This screenshot shows the generation of the second story: + +![icpp_llama2_without_limits](../assets/icpp_llama2_without_limits.png) + + +# stories260K + +The default model is`stories15M.bin`, with `tokenizer.bin`, which contains the default llama2 tokenizer using 32000 tokens. + +For testing, it is nice to be able to work with a smaller model & tokenizer: +- Download the model & tokenizer from [huggingface stories260K](https://huggingface.co/karpathy/tinyllamas/tree/main/stories260K) and store them in: + - stories260K/stories260K.bin + - stories260K/tok512.bin + - stories260K/tok512.model +- Deploy the canister: + ```bash + icpp build-wasm + dfx deploy + ``` +- Upload the model & tokenizer: + ```bash + python -m scripts.upload --model stories260K/stories260K.bin --tokenizer stories260K/tok512.bin + ``` +- Inference is now possible with many more tokens before hitting the instruction limit, but off course, the stories are not as good: + ```bash + $ dfx canister call llama2 inference '(record {prompt = "Lilly went swimming yesterday " : text; steps = 100 : nat64; temperature = 0.9 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' + ( + variant { + ok = "Lilly went swimming yesterday order. She had a great eyes that was closed. One day, she asked her mom why the cloud was close to the pond. \n\"Mommy, I will take clothes away,\" Lila said. \"Th\n" + }, + ) + ``` + +# Fine tuning + + When making your own checkpoint via fine-tuning, make sure to train with the correct version of [karpathy/llama2.c](https://github.com/karpathy/llama2.c): + + | release | commit sha | + | --------| ----------------------------------------- | + | 0.1.0 | b28c1e26c5ab5660267633e1bdc910a43b7255bf | + | 0.2.0 | 57bf0e9ee4bbd61c98c4ad204b72f2b8881ac8cd | + | 0.3.0 | b9fb86169f56bd787bb644c62a80bbab56f8dccc | \ No newline at end of file diff --git a/icpp_llama2/README_icpp_llama2_resource_requirements.md b/icpp_llama2/README_icpp_llama2_resource_requirements.md new file mode 100644 index 0000000..5afcd9c --- /dev/null +++ b/icpp_llama2/README_icpp_llama2_resource_requirements.md @@ -0,0 +1,71 @@ +# Canister resource requirements for icpp_llama2. + +Do not edit this file. It is created with the command: +```bash +python -m scripts.icpp_llama2_sizer +``` + +### Tokenizer Memory (per model) + +Memory Type | 260K
(MB) | 15M
(MB) | 42M
(MB) | 110M
(MB) +--- | --- | --- | --- | --- +vocab_memory | 0.00 | 0.12 | 0.12 | 0.12 +vocab_scores_memory | 0.00 | 0.12 | 0.12 | 0.12 +Total | 0.00 | 0.24 | 0.24 | 0.24 + + +### TransformerWeights Memory (per model) + +Memory Type | 260K
(MB) | 15M
(MB) | 42M
(MB) | 110M
(MB) +--- | --- | --- | --- | --- +token_embedding_table | 0.12 | 35.16 | 62.50 | 93.75 +rms_att_weight | 0.00 | 0.01 | 0.02 | 0.04 +wq | 0.08 | 1.90 | 8.00 | 27.00 +wk | 0.04 | 1.90 | 8.00 | 27.00 +wv | 0.04 | 1.90 | 8.00 | 27.00 +wo | 0.08 | 1.90 | 8.00 | 27.00 +rms_ffn_weight | 0.00 | 0.01 | 0.02 | 0.04 +w1 | 0.21 | 5.06 | 21.50 | 72.00 +w2 | 0.21 | 5.06 | 21.50 | 72.00 +w3 | 0.21 | 5.06 | 21.50 | 72.00 +rms_final_weight | 0.00 | 0.00 | 0.00 | 0.00 +wcls | 0.12 | 35.16 | 62.50 | 93.75 +Total | 1.12 | 93.11 | 221.53 | 511.57 + + +### RunState Memory (per user) + +Memory Type | 260K
(MB) | 15M
(MB) | 42M
(MB) | 110M
(MB) +--- | --- | --- | --- | --- +x | 0.00 | 0.00 | 0.00 | 0.00 +xb | 0.00 | 0.00 | 0.00 | 0.00 +xb2 | 0.00 | 0.00 | 0.00 | 0.00 +hb | 0.00 | 0.00 | 0.01 | 0.01 +hb2 | 0.00 | 0.00 | 0.01 | 0.01 +q | 0.00 | 0.00 | 0.00 | 0.00 +k | 0.00 | 0.00 | 0.00 | 0.00 +v | 0.00 | 0.00 | 0.00 | 0.00 +att | 0.02 | 0.01 | 0.03 | 0.05 +logits | 0.00 | 0.12 | 0.12 | 0.12 +key_cache | 0.31 | 1.69 | 16.00 | 36.00 +value_cache | 0.31 | 1.69 | 16.00 | 36.00 +Total | 0.65 | 3.52 | 32.18 | 72.20 + + +### Total Memory + +Memory Type | 260K
(MB) | 15M
(MB) | 42M
(MB) | 110M
(MB) +--- | --- | --- | --- | --- +Total Tokenizer Memory (per model) | 0.00 | 0.24 | 0.24 | 0.24 +Total TransformerWeights Memory (per model) | 1.12 | 93.11 | 221.53 | 511.57 +Total RunState Memory (per user) | 0.65 | 3.52 | 32.18 | 72.20 +Overall Total Memory | 1.76 | 96.62 | 253.71 | 583.78 + + +### Canister Metrics + +Canister Metrics | 260K
(MB) | 15M
(MB) | 42M
(MB) | 110M
(MB) +--- | --- | --- | --- | --- +Max number of concurrent users | 6347 | 1138 | 120 | 49 + + diff --git a/icpp_llama2/canister_ids.json b/icpp_llama2/canister_ids.json new file mode 100644 index 0000000..7eac839 --- /dev/null +++ b/icpp_llama2/canister_ids.json @@ -0,0 +1,5 @@ +{ + "llama2": { + "ic": "4c4bn-daaaa-aaaag-abvcq-cai" + } +} \ No newline at end of file diff --git a/icpp_llama2/demo.ps1 b/icpp_llama2/demo.ps1 new file mode 100644 index 0000000..615a8b2 --- /dev/null +++ b/icpp_llama2/demo.ps1 @@ -0,0 +1,126 @@ +####################################################################### +# For Windows PowerShell (Miniconda is recommended) +####################################################################### + +Write-Host " " +Write-Host "--------------------------------------------------" +Write-Host "Stopping the local network in wsl" +wsl dfx stop + +Write-Host " " +Write-Host "--------------------------------------------------" +Write-Host "Starting the local network in wsl as a PowerShell background job" +$jobName = "llama2" + +# Stop the job if it already exist +# Get a list of all the background jobs with a specific name +$jobs = Get-Job -Name $jobName -ErrorAction SilentlyContinue + +# Stop all the jobs +$jobs | Remove-Job + +# Start the local network with redirecting error messages to output stream +$job = Start-Job -ScriptBlock { wsl dfx start --clean 2>&1 } -Name $jobName + +# Display the details of the job +$job | Format-Table + +# Wait for 10 seconds +Write-Host " " +Write-Host "Waiting for 10 seconds to allow the local network to start..." +Start-Sleep -Seconds 10 + +# Get the output of the job +$output = Receive-Job -Job $job +Write-Host $output -ForegroundColor Green + +####################################################################### +Write-Host " " +Write-Host "--------------------------------------------------" +Write-Host "Building the wasm with wasi-sdk" +icpp build-wasm --to-compile all +# icpp build-wasm --to-compile mine + +####################################################################### +Write-Host " " +Write-Host "--------------------------------------------------" +Write-Host "Deploying the wasm to a canister on the local network" +wsl --% dfx deploy + +####################################################################### +Write-Host " " +Write-Host "--------------------------------------------------" +Write-Host "Checking health endpoint" +wsl --% dfx canister call llama2 health + +####################################################################### +Write-Host " " +Write-Host "--------------------------------------------------" +Write-Host "Upload the model & tokenizer" +python -m scripts.upload + +####################################################################### +Write-Host " " +Write-Host "--------------------------------------------------" +Write-Host "Checking readiness endpoint" +wsl --% dfx canister call llama2 ready + +####################################################################### +Write-Host " " +Write-Host "--------------------------------------------------" +Write-Host "Generate a new story, 10 tokens at a time, starting with an empty prompt." +wsl --% dfx canister call llama2 new_chat '()' +wsl --% dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +wsl --% dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +wsl --% dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +wsl --% dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +wsl --% dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +wsl --% dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +wsl --% dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +wsl --% dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' + +Write-Host " " +Write-Host "--------------------------------------------------" +Write-Host "Generate a new story, 10 tokens at a time, using a starting prompt" +wsl --% dfx canister call llama2 new_chat '()' +# You can build the prompt in multiple calls +wsl --% dfx canister call llama2 inference '(record {prompt = "Lilly went to" : text; steps = 0 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +wsl --% dfx canister call llama2 inference '(record {prompt = "the beach this morning." : text; steps = 0 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +wsl --% dfx canister call llama2 inference '(record {prompt = "She saw a little boat" : text; steps = 0 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +wsl --% dfx canister call llama2 inference '(record {prompt = "with her friend Billy" : text; steps = 0 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +# Followed by building out the story +wsl --% dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +wsl --% dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +wsl --% dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +wsl --% dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +wsl --% dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +wsl --% dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +wsl --% dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +wsl --% dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +wsl --% dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +wsl --% dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' + +# ####################################################################### +# Write-Host " " +# Write-Host "--------------------------------------------------" +# Write-Host "Running the full smoketests with pytest" +# pytest --network=local + +####################################################################### +# Write-Host " " +# Write-Host "--------------------------------------------------" +# Write-Host "Stopping the local network in wsl" +# wsl dfx stop + +# ####################################################################### +# Write-Host " " +# Write-Host "--------------------------------------------------" +# Write-Host "Building the Windows native debug executable with clang++" +# icpp build-native --to-compile all +# # icpp build-native --to-compile mine + +# ####################################################################### +# Write-Host " " +# Write-Host "--------------------------------------------------" +# Write-Host "Running the Windows native debug executable" +# .\build-native\mockic.exe \ No newline at end of file diff --git a/icpp_llama2/demo.sh b/icpp_llama2/demo.sh new file mode 100755 index 0000000..2dbe725 --- /dev/null +++ b/icpp_llama2/demo.sh @@ -0,0 +1,104 @@ +#!/bin/sh + +####################################################################### +# For Linux & Mac +####################################################################### + +echo " " +echo "--------------------------------------------------" +echo "Stopping the local network" +dfx stop + +echo " " +echo "--------------------------------------------------" +echo "Starting the local network as a background process" +dfx start --clean --background + +####################################################################### +echo "--------------------------------------------------" +echo "Building the wasm with wasi-sdk" +icpp build-wasm --to-compile all +# icpp build-wasm --to-compile mine + +####################################################################### +echo " " +echo "--------------------------------------------------" +echo "Deploying the wasm to a canister on the local network" +dfx deploy + +####################################################################### +echo " " +echo "--------------------------------------------------" +echo "Checking health endpoint" +dfx canister call llama2 health + +####################################################################### +echo " " +echo "--------------------------------------------------" +echo "Upload the model & tokenizer" +python -m scripts.upload + +####################################################################### +echo " " +echo "--------------------------------------------------" +echo "Checking readiness endpoint" +dfx canister call llama2 ready + +####################################################################### +echo " " +echo "--------------------------------------------------" +echo "Generate a new story, 10 tokens at a time, starting with an empty prompt." +dfx canister call llama2 new_chat '()' +dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' + +echo " " +echo "--------------------------------------------------" +echo "Generate a new story, 10 tokens at a time, using a starting prompt" +dfx canister call llama2 new_chat '()' +# You can build the prompt in multiple calls +dfx canister call llama2 inference '(record {prompt = "Lilly went to" : text; steps = 0 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call llama2 inference '(record {prompt = "the beach this morning." : text; steps = 0 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call llama2 inference '(record {prompt = "She saw a little boat" : text; steps = 0 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call llama2 inference '(record {prompt = "with her friend Billy" : text; steps = 0 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +# Followed by building out the story +dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' + +# ####################################################################### +# echo " " +# echo "--------------------------------------------------" +# echo "Running the full smoketests with pytest" +# pytest --network=local + +####################################################################### +# echo "--------------------------------------------------" +# echo "Stopping the local network" +# dfx stop + +# ####################################################################### +# echo " " +# echo "--------------------------------------------------" +# echo "Building the OS native debug executable with clang++" +# icpp build-native --to-compile all +# # icpp build-native --to-compile mine + +# ####################################################################### +# echo " " +# echo "--------------------------------------------------" +# echo "Running the OS native debug executable" +# ./build-native/mockic.exe \ No newline at end of file diff --git a/icpp_llama2/demo1-ic.sh b/icpp_llama2/demo1-ic.sh new file mode 100755 index 0000000..890799e --- /dev/null +++ b/icpp_llama2/demo1-ic.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +####################################################################### +# For Linux & Mac +####################################################################### + +####################################################################### +# Before running this, create an identity 'demo1', with: +# $ dfx identity new demo1 +echo " " +echo "--------------------------------------------------" +echo "Generate a new story, 10 tokens at a time, starting with an empty prompt." +dfx canister call --identity demo1 --network ic llama2 new_chat '()' +dfx canister call --identity demo1 --network ic llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo1 --network ic llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo1 --network ic llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo1 --network ic llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo1 --network ic llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo1 --network ic llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo1 --network ic llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo1 --network ic llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo1 --network ic llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo1 --network ic llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo1 --network ic llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo1 --network ic llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' \ No newline at end of file diff --git a/icpp_llama2/demo1.sh b/icpp_llama2/demo1.sh new file mode 100755 index 0000000..97486de --- /dev/null +++ b/icpp_llama2/demo1.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +####################################################################### +# For Linux & Mac +####################################################################### + +####################################################################### +# Before running this, create an identity 'demo1', with: +# $ dfx identity new demo1 +echo " " +echo "--------------------------------------------------" +echo "Generate a new story, 10 tokens at a time, starting with an empty prompt." +dfx canister call --identity demo1 llama2 new_chat '()' +dfx canister call --identity demo1 llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo1 llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo1 llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo1 llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo1 llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo1 llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo1 llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo1 llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo1 llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo1 llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo1 llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo1 llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' \ No newline at end of file diff --git a/icpp_llama2/demo2-ic.sh b/icpp_llama2/demo2-ic.sh new file mode 100755 index 0000000..424fcf5 --- /dev/null +++ b/icpp_llama2/demo2-ic.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +####################################################################### +# For Linux & Mac +####################################################################### + +####################################################################### +# Before running this, create an identity 'demo2', with: +# $ dfx identity new demo2 +echo " " +echo "--------------------------------------------------" +echo "Generate a new story, 10 tokens at a time, using a starting prompt" +dfx canister call --identity demo2 --network ic llama2 new_chat '()' +# You can build the prompt in multiple calls +dfx canister call --identity demo2 --network ic llama2 inference '(record {prompt = "Lilly went to" : text; steps = 0 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo2 --network ic llama2 inference '(record {prompt = "the beach this morning." : text; steps = 0 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo2 --network ic llama2 inference '(record {prompt = "She saw a little boat" : text; steps = 0 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo2 --network ic llama2 inference '(record {prompt = "with her friend Billy" : text; steps = 0 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +# Followed by building out the story +dfx canister call --identity demo2 --network ic llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo2 --network ic llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo2 --network ic llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo2 --network ic llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo2 --network ic llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo2 --network ic llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo2 --network ic llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo2 --network ic llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo2 --network ic llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo2 --network ic llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' \ No newline at end of file diff --git a/icpp_llama2/demo2.sh b/icpp_llama2/demo2.sh new file mode 100755 index 0000000..ac12211 --- /dev/null +++ b/icpp_llama2/demo2.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +####################################################################### +# For Linux & Mac +####################################################################### + +####################################################################### +# Before running this, create an identity 'demo2', with: +# $ dfx identity new demo2 +echo " " +echo "--------------------------------------------------" +echo "Generate a new story, 10 tokens at a time, using a starting prompt" +dfx canister call --identity demo2 llama2 new_chat '()' +# You can build the prompt in multiple calls +dfx canister call --identity demo2 llama2 inference '(record {prompt = "Lilly went to" : text; steps = 0 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo2 llama2 inference '(record {prompt = "the beach this morning." : text; steps = 0 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo2 llama2 inference '(record {prompt = "She saw a little boat" : text; steps = 0 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo2 llama2 inference '(record {prompt = "with her friend Billy" : text; steps = 0 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +# Followed by building out the story +dfx canister call --identity demo2 llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo2 llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo2 llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo2 llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo2 llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo2 llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo2 llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo2 llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo2 llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' +dfx canister call --identity demo2 llama2 inference '(record {prompt = "" : text; steps = 10 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' \ No newline at end of file diff --git a/icpp_llama2/dfx.json b/icpp_llama2/dfx.json new file mode 100644 index 0000000..018ff6a --- /dev/null +++ b/icpp_llama2/dfx.json @@ -0,0 +1,16 @@ +{ + "version": 1, + "canisters": { + "llama2": { + "type": "custom", + "candid": "src/llama2.did", + "wasm": "build/llama2.wasm" + } + }, + "defaults": { + "build": { + "args": "", + "packtool": "" + } + } +} \ No newline at end of file diff --git a/icpp_llama2/icpp.toml b/icpp_llama2/icpp.toml new file mode 100644 index 0000000..6cc7ed0 --- /dev/null +++ b/icpp_llama2/icpp.toml @@ -0,0 +1,18 @@ +[build-wasm] +canister = "llama2" +did_path = "src/llama2.did" +cpp_paths = ["src/*.cpp"] +cpp_header_paths = ["src/*.h"] +cpp_compile_flags = [] +cpp_link_flags = [] +c_paths = ["src/run.c"] +c_header_paths = ["src/run.h"] +c_compile_flags = [] +[build-native] +cpp_paths = ["native/main.cpp"] +cpp_header_paths = ["native/main.h"] +cpp_compile_flags = [] +cpp_link_flags = [] +c_paths = [] +c_header_paths = [] +c_compile_flags = [] diff --git a/icpp_llama2/native/main.cpp b/icpp_llama2/native/main.cpp new file mode 100644 index 0000000..ffcb215 --- /dev/null +++ b/icpp_llama2/native/main.cpp @@ -0,0 +1,642 @@ +// Main entry point for a native debug executable. +// Build it with: `icpp build-native` from the parent folder where 'icpp.toml' resides + +#include "main.h" + +#include +#include +#include +#include +#include +#include +#include + +#ifdef _WIN32 +#include +#define get_current_dir _getcwd +#else +#include +#define get_current_dir getcwd +#endif + +#include "../src/canister.h" +#include "../src/chats.h" +#include "../src/inference.h" +#include "../src/initialize.h" +#include "../src/upload.h" +#include "../src/users.h" + +// The Mock IC +#include "mock_ic.h" + +// Helper function to chunk a vector into x Mb +std::vector> +chunk_file(const std::vector &model_bytes, const float x_chunk = 1.0) { + const size_t chunk_size = std::round(x_chunk * 1024 * 1024); // x_chunk & 1 MB + std::vector> chunk_indices; + + for (size_t i = 0; i < model_bytes.size(); i += chunk_size) { + size_t end = i + chunk_size; + + // If end goes beyond the size of model_bytes, reduce it to the size of model_bytes + if (end > model_bytes.size()) end = model_bytes.size(); + + chunk_indices.push_back(std::make_pair(i, end)); + } + + return chunk_indices; +} + +int main() { + MockIC mockIC(true); + + // Placeholder strings for the raw candid messages going in and out + std::string candid_in{""}; // what the client will send + std::string candid_out_expected{""}; // what the canister must send back + + // ----------------------------------------------------------------------------- + // Configs for the tests: + + // The pretend principals of the caller + std::string my_principal{ + "expmt-gtxsw-inftj-ttabj-qhp5s-nozup-n3bbo-k7zvn-dg4he-knac3-lae"}; + std::string your_principal{"2ibo7-dia"}; + std::string anonymous_principal{"2vxsx-fae"}; + + bool silent_on_trap = true; + + // The model & tokenizer to use + int model_to_use = 1; // 1=260K, 2=15M + + std::string model_path; + std::string tokenizer_path; + if (model_to_use == 1) { + // Use this really small model during development + model_path = "stories260K/stories260K.bin"; + tokenizer_path = "stories260K/tok512.bin"; + } else if (model_to_use == 2) { + // Use this during final QA + std::string model_path = "models/stories15M.bin"; + std::string tokenizer_path = "tokenizers/tokenizer.bin"; + } else { + std::cout << "ERROR: Uknown value of 'model_to_use'"; + exit(1); + } + std::cout << "model_path = " << model_path << "\n"; + std::cout << "tokenizer_path = " << tokenizer_path << "\n"; + + // ----------------------------------------------------------------------------- + // Read the models file into a bytes vector + + std::streamsize file_size; // file size bytes + std::vector model_bytes; // bytes to upload + { + // Open the file in binary mode. 'ate' means open at end + std::ifstream file(model_path, std::ios::binary | std::ios::ate); + if (!file) { + std::cout << "Couldn't open file " << model_path << '\n'; + char cwd[FILENAME_MAX]; + if (!get_current_dir(cwd, sizeof(cwd))) { + std::cout << "Couldn't determine current_dir " << '\n'; + return errno; + } + std::cout << "The current working directory is " << std::string(cwd) + << '\n'; + return 1; + } + + // Figure out the total size of the file in bytes + file_size = file.tellg(); + + // Seek back to the start + file.seekg(0, std::ios::beg); + + // Resize the bytes vector to the correct size + model_bytes.resize(file_size); + + // Read the file into the vector + if (!file.read(reinterpret_cast(model_bytes.data()), file_size)) { + std::cout << "File read failed!\n"; + return 1; + } + } + + // ----------------------------------------------------------------------------- + // Read the tokenizer file into a bytes vector + + // std::streamsize file_size; // file size bytes + std::vector tokenizer_bytes; // bytes to upload + { + // Open the file in binary mode. 'ate' means open at end + std::ifstream file(tokenizer_path, std::ios::binary | std::ios::ate); + if (!file) { + std::cout << "Couldn't open file " << tokenizer_path << '\n'; + char cwd[FILENAME_MAX]; + if (!get_current_dir(cwd, sizeof(cwd))) { + std::cout << "Couldn't determine current_dir " << '\n'; + return errno; + } + std::cout << "The current working directory is " << std::string(cwd) + << '\n'; + return 1; + } + + // Figure out the total size of the file in bytes + file_size = file.tellg(); + + // Seek back to the start + file.seekg(0, std::ios::beg); + + // Resize the bytes vector to the correct size + tokenizer_bytes.resize(file_size); + + // Read the file into the vector + if (!file.read(reinterpret_cast(tokenizer_bytes.data()), + file_size)) { + std::cout << "File read failed!\n"; + return 1; + } + } + + // ----------------------------------------------------------------------------- + // '()' -> canister_init does not return directly, so skip validation check + mockIC.run_test("canister_init", canister_init, "4449444c0000", "", + silent_on_trap, my_principal); + + // '()' -> '(true)' + mockIC.run_test("health", health, "4449444c0000", "4449444c00017e01", + silent_on_trap, anonymous_principal); + + // '()' -> '(false)' + mockIC.run_test("ready", ready, "4449444c0000", "4449444c00017e00", + silent_on_trap, anonymous_principal); + + // '()' -> '(variant { err = 401 : nat16 })' + // Call with non owner principal must be denied + mockIC.run_test("reset_model err", reset_model, "4449444c0000", + "4449444c016b01e58eb4027a0100009101", silent_on_trap, + anonymous_principal); + + // '()' -> '(variant { ok = 200 : nat16 })' + // Call with owner principal + mockIC.run_test("reset_model", reset_model, "4449444c0000", + "4449444c016b019cc2017a010000c800", silent_on_trap, + my_principal); + + // ========================================================================== + std::cout << "\n+++++++++++++++++++++++++++++++++++++++++++++++++++++\n"; + std::cout << "Sending bytes of " << model_path << "\n"; + float x_chunk = 25; // To speed up native test. IC can handle only < 2.0 Mb + auto chunk_indices = chunk_file(model_bytes, x_chunk); + + // Iterate over all chunks + int i = 0; + int count_bytes = 0; + for (auto &indices : chunk_indices) { + auto chunk_start = indices.first; + auto chunk_end = indices.second; + + // Construct a temporary vector for the chunk + std::vector chunk(model_bytes.begin() + chunk_start, + model_bytes.begin() + chunk_end); + + count_bytes += chunk.size(); + + std::cout << "Sending candid for " << std::to_string(chunk.size()) + << " bytes : \n"; + std::cout << "- i = " << std::to_string(i) << "\n"; + std::cout << std::fixed << std::setprecision(1); + std::cout << "- progress = " + << (static_cast(count_bytes) / model_bytes.size()) * 100 + << " % " << std::endl; + + std::cout << "- chunk[0] = " << std::to_string(chunk[0]) << "\n"; + std::cout << "- chunk.back() = " << std::to_string(chunk.back()) << "\n"; + std::cout << "Serializing... \n"; + candid_in = CandidSerialize(CandidTypeVecNat8{chunk}).as_hex_string(); + std::cout << "- candid_raw = "; + if (candid_in.size() <= 20) std::cout << candid_in << "\n"; + else + std::cout << candid_in.substr(0, 10) << "..." + << candid_in.substr(candid_in.size() - 10) << "\n"; + + // candid_in -> '(variant { ok = 200 : nat16 })' + candid_out_expected = "4449444c016b019cc2017a010000c800"; + mockIC.run_test("upload_model_bytes_chunk", upload_model_bytes_chunk, + candid_in, candid_out_expected, silent_on_trap, + my_principal); + + i++; + } + + // ========================================================================== + std::cout << "\n+++++++++++++++++++++++++++++++++++++++++++++++++++++\n"; + std::cout << "Sending bytes of " << tokenizer_path << "\n"; + x_chunk = 1.9; + chunk_indices = chunk_file(tokenizer_bytes, x_chunk); + + // Iterate over all chunks + i = 0; + count_bytes = 0; + for (auto &indices : chunk_indices) { + auto chunk_start = indices.first; + auto chunk_end = indices.second; + + // Construct a temporary vector for the chunk + std::vector chunk(tokenizer_bytes.begin() + chunk_start, + tokenizer_bytes.begin() + chunk_end); + count_bytes += chunk.size(); + + std::cout << "Sending candid for " << std::to_string(chunk.size()) + << " bytes : \n"; + std::cout << "- i = " << std::to_string(i) << "\n"; + std::cout << std::fixed << std::setprecision(1); + std::cout << "- progress = " + << (static_cast(count_bytes) / tokenizer_bytes.size()) * + 100 + << " % " << std::endl; + + std::cout << "- chunk[0] = " << std::to_string(chunk[0]) << "\n"; + std::cout << "- chunk.back() = " << std::to_string(chunk.back()) << "\n"; + + std::cout << "Serializing... \n"; + candid_in = CandidSerialize(CandidTypeVecNat8{chunk}).as_hex_string(); + std::cout << "- candid_raw = "; + if (candid_in.size() <= 20) std::cout << candid_in << "\n"; + else + std::cout << candid_in.substr(0, 10) << "..." + << candid_in.substr(candid_in.size() - 10) << "\n"; + + // candid_in -> '(variant { ok = 200 : nat16 })' + candid_out_expected = "4449444c016b019cc2017a010000c800"; + mockIC.run_test("upload_tokenizer_bytes_chunk", + upload_tokenizer_bytes_chunk, candid_in, + candid_out_expected, silent_on_trap, my_principal); + + i++; + } + + // ========================================================================== + // Mimic two principals at once are building a story... + + // '()' -> '(variant { ok = 200 : nat16 })' + mockIC.run_test("initialize", initialize, "4449444c0000", + "4449444c016b019cc2017a010000c800", silent_on_trap, + my_principal); + + // '()' -> '(variant { ok = 200 : nat16 })' + mockIC.run_test("new_chat", new_chat, "4449444c0000", + "4449444c016b019cc2017a010000c800", silent_on_trap, + my_principal); + // '()' -> '(variant { ok = 200 : nat16 })' + mockIC.run_test("new_chat", new_chat, "4449444c0000", + "4449444c016b019cc2017a010000c800", silent_on_trap, + your_principal); + + // '()' -> '(variant { err = "The Llama2 canister does not allow calling with anonymous principal." : text })' + mockIC.run_test( + "new_chat", new_chat, "4449444c0000", + "4449444c016b01e58eb4027101000044546865204c6c616d61322063616e697374657220646f6573206e6f7420616c6c6f772063616c6c696e67207769746820616e6f6e796d6f7573207072696e636970616c2e", + silent_on_trap, anonymous_principal); + /* + '()' -> + '( + record { + dim = 288 : int; + hidden_dim = 768 : int; + n_layers = 6 : int; + n_heads = 6 : int; + n_kv_heads = 6 : int; + vocab_size = 32_000 : int; + seq_len = 256 : int; + }, + )' + */ + std::string expected_response = + "4449444c016c07c8fab0027cb087c0d9017cd58488bc027cb3fdc984037cf3e0d4d6057cf5cfd3fc057c82c3e4f60f7c0100a0020680fa01800606800206"; + if (model_to_use == 1) { + /* + '()' -> + '( + record { + dim = 64 : int; + hidden_dim = 4 : int; + n_layers = 512 : int; + n_heads = 172 : int; + n_kv_heads = 5 : int; + vocab_size = 512 : int; + seq_len = 8 : int; + }, + )' + */ + expected_response = + "4449444c016c07c8fab0027cb087c0d9017cd58488bc027cb3fdc984037cf3e0d4d6057cf5cfd3fc057c82c3e4f60f7c0100c000048004ac0105800408"; + } + mockIC.run_test("get_model_config", get_model_config, "4449444c0000", + expected_response, silent_on_trap, my_principal); + + // ----------------------------------------------------------------------------------------- + std::array principals = {my_principal, your_principal}; + + // Repeat it two times, for two principals intermittently + for (int k = 0; k < 2; k++) { + for (const auto &principal : principals) { + + // A new chat, using a prompt built in multiple steps + // '()' -> '(variant { ok = 200 : nat16 })' + mockIC.run_test("new_chat", new_chat, "4449444c0000", + "4449444c016b019cc2017a010000c800", silent_on_trap, + principal); + } + + // Loop to create a long story, 10 tokens at a time + // With temperature=0.0: greedy argmax sampling -> the story will be the same every time + std::array prompt = {"Lilly went to", "Billy came from"}; + std::array steps = {0, 0}; + std::array temperature = {0.0, 0.0}; + std::array topp = {0.9, 0.9}; + std::array rng_seed = {0, 0}; + + std::array generated_tokens = {"", ""}; + std::array story = {"", ""}; + for (int i = 0; i < 10; i++) { + for (int j = 0; j < 2; j++) { + + CandidTypeRecord r_in; + r_in.append("prompt", CandidTypeText(prompt[j])); + r_in.append("steps", CandidTypeNat64(steps[j])); + r_in.append("temperature", CandidTypeFloat32(temperature[j])); + r_in.append("topp", CandidTypeFloat32(topp[j])); + r_in.append("rng_seed", CandidTypeNat64(uint64_t(rng_seed[j]))); + candid_in = CandidSerialize(r_in).as_hex_string(); + + std::string candid_out; + mockIC.run_test("inference 0a", inference, candid_in, "", + silent_on_trap, principals[j], &candid_out); + + std::string err_text; + CandidTypeVariant v_out; + v_out.append("ok", CandidTypeText(&generated_tokens[j])); + v_out.append("err", CandidTypeText(&err_text)); + + CandidArgs A; + A.append(v_out); + CandidDeserialize(candid_out, A); + if (err_text.size() > 0) { + std::cout << "ERROR returned by inference function.\n"; + exit(1); + } + story[j] += generated_tokens[j]; + std::cout << story[j] << "\n"; + } + if (i == 0) { + prompt[0] = "the beach this morning. "; + prompt[1] = "the pool this afternoon. "; + steps[0] = 0; + steps[1] = 0; + } else if (i == 1) { + prompt[0] = "She saw a little boat"; + prompt[1] = "He went swimming"; + steps[0] = 0; + steps[1] = 0; + } else if (i == 2) { + prompt[0] = " with her friend Billy"; + prompt[1] = " with his friend Lilly"; + steps[0] = 0; + steps[1] = 0; + } else { + prompt[0] = ""; + prompt[1] = ""; + steps[0] = 10; + steps[1] = 10; + } + } + } + + // ----------------------------------------------------------------------------------------- + { // A new chat, starting with an empty prompt + // '()' -> '(variant { ok = 200 : nat16 })' + mockIC.run_test("new_chat", new_chat, "4449444c0000", + "4449444c016b019cc2017a010000c800", silent_on_trap, + my_principal); + + // Loop to create 1000 token long story, 10 tokens at a time + // With temperature=0.0: greedy argmax sampling -> the story will be the same every time + std::string prompt = ""; + uint64_t steps = 10; + float temperature = 0.0; + float topp = 0.9; + uint64_t rng_seed = 0; + + std::string generated_tokens = ""; + std::string story = ""; + for (int i = 0; i < 100; i++) { + CandidTypeRecord r_in; + r_in.append("prompt", CandidTypeText(prompt)); + r_in.append("steps", CandidTypeNat64(steps)); + r_in.append("temperature", CandidTypeFloat32(temperature)); + r_in.append("topp", CandidTypeFloat32(topp)); + r_in.append("rng_seed", CandidTypeNat64(uint64_t(rng_seed))); + candid_in = CandidSerialize(r_in).as_hex_string(); + + std::string candid_out; + mockIC.run_test("inference 0b", inference, candid_in, "", silent_on_trap, + my_principal, &candid_out); + + std::string err_text; + CandidTypeVariant v_out; + v_out.append("ok", CandidTypeText(&generated_tokens)); + v_out.append("err", CandidTypeText(&err_text)); + + CandidArgs A; + A.append(v_out); + CandidDeserialize(candid_out, A); + if (err_text.size() > 0) { + std::cout << "ERROR returned by inference function."; + exit(1); + } + story += generated_tokens; + + prompt = ""; + } + std::cout << story; + } + + // ----------------------------------------------------------------------------------------- + // A new chat + // '()' -> '(variant { ok = 200 : nat16 })' + mockIC.run_test("new_chat", new_chat, "4449444c0000", + "4449444c016b019cc2017a010000c800", silent_on_trap, + my_principal); + + // With temperature=0.0: greedy argmax sampling -> the story will be the same every time + // '(record {prompt = "" : text; steps = 100 : nat64; temperature = 0.0 : float32; topp = 1.0 : float32; rng_seed = 0 : nat64;})' + // -> '(variant { ok = "Once upon a time, there was a little girl named Lily. She loved to play outside in the sunshine. One day, she saw a big, red ball in the sky. It was the sun! She thought it was so pretty.\nLily wanted to play with the ball, but it was too high up in the sky. She tried to jump and reach it, but she couldn\'t. Then, she had an idea. She would use a stick to knock the" : text })' + expected_response = + "4449444c016b019cc20171010000ed024f6e63652075706f6e20612074696d652c207468657265207761732061206c6974746c65206769726c206e616d6564204c696c792e20536865206c6f76656420746f20706c6179206f75747369646520696e207468652073756e7368696e652e204f6e65206461792c20736865207361772061206269672c207265642062616c6c20696e2074686520736b792e20497420776173207468652073756e21205368652074686f756768742069742077617320736f207072657474792e0a4c696c792077616e74656420746f20706c61792077697468207468652062616c6c2c206275742069742077617320746f6f206869676820757020696e2074686520736b792e2053686520747269656420746f206a756d7020616e642072656163682069742c206275742073686520636f756c646e27742e205468656e2c207368652068616420616e20696465612e2053686520776f756c6420757365206120737469636b20746f206b6e6f636b20746865"; + if (model_to_use == 1) { + // -> '(variant { ok = ""Once upon a time, there was a little girl named Lily. She loved to play outside in the park. One day, she saw a big, red ball. She wanted to play with it, but it was too high.\nLily\'s mom said, \"Lily, let\'s go to the park.\" Lily was sad and didn\'t know w\n"" : text })' + expected_response = + "4449444c016b019cc20171010000fd014f6e63652075706f6e20612074696d652c207468657265207761732061206c6974746c65206769726c206e616d6564204c696c792e20536865206c6f76656420746f20706c6179206f75747369646520696e20746865207061726b2e204f6e65206461792c20736865207361772061206269672c207265642062616c6c2e205368652077616e74656420746f20706c617920776974682069742c206275742069742077617320746f6f20686967682e0a4c696c792773206d6f6d20736169642c20224c696c792c206c6574277320676f20746f20746865207061726b2e22204c696c79207761732073616420616e64206469646e2774206b6e6f772077"; + } + mockIC.run_test( + "inference 1", inference, + "4449444c016c05b4e8c2e40373bbb885e80473a7f7b9a00878c5c8cea60878a4a3e1aa0b710100000000000000803f6400000000000000000000000000000000", + expected_response, silent_on_trap, my_principal); + + // ----------------------------------------------------------------------------------------- + // A new chat + // '()' -> '(variant { ok = 200 : nat16 })' + mockIC.run_test("new_chat", new_chat, "4449444c0000", + "4449444c016b019cc2017a010000c800", silent_on_trap, + my_principal); + // With temperature=0.0 & topp=0.9, still greedy argmax sampling -> the story will be the same every time + // '(record {prompt = "" : text; steps = 100 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' + mockIC.run_test( + "inference 2", inference, + "4449444c016c05b4e8c2e40373bbb885e80473a7f7b9a00878c5c8cea60878a4a3e1aa0b710100000000006666663f6400000000000000000000000000000000", + expected_response, silent_on_trap, my_principal); + + // ----------------------------------------------------------------------------------------- + // A new chat + // '()' -> '(variant { ok = 200 : nat16 })' + mockIC.run_test("new_chat", new_chat, "4449444c0000", + "4449444c016b019cc2017a010000c800", silent_on_trap, + my_principal); + // With temperature>0.0 & topp=1.0: regular sampling + // '(record {prompt = "" : text; steps = 100 : nat64; temperature = 0.9 : float32; topp = 1.0 : float32; rng_seed = 0 : nat64;})' + // -> --can not check on story-- + mockIC.run_test( + "inference 3", inference, + "4449444c016c05b4e8c2e40373bbb885e80473a7f7b9a00878c5c8cea60878a4a3e1aa0b7101006666663f0000803f6400000000000000000000000000000000", + "", silent_on_trap, my_principal); + + // ----------------------------------------------------------------------------------------- + // A new chat + // '()' -> '(variant { ok = 200 : nat16 })' + mockIC.run_test("new_chat", new_chat, "4449444c0000", + "4449444c016b019cc2017a010000c800", silent_on_trap, + my_principal); + // With temperature>0.0 & topp<1.0: top-pp (nucleus) sampling + // '(record {prompt = "" : text; steps = 100 : nat64; temperature = 0.9 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' + // -> --can not check on story-- + mockIC.run_test( + "inference 4", inference, + "4449444c016c05b4e8c2e40373bbb885e80473a7f7b9a00878c5c8cea60878a4a3e1aa0b7101006666663f6666663f6400000000000000000000000000000000", + "", silent_on_trap, my_principal); + + // ----------------------------------------------------------------------------------------- + // A new chat + // '()' -> '(variant { ok = 200 : nat16 })' + mockIC.run_test("new_chat", new_chat, "4449444c0000", + "4449444c016b019cc2017a010000c800", silent_on_trap, + my_principal); + // With temperature=0.0: greedy argmax sampling -> the story will be the same every time + // '(record {prompt = "Yesterday I went for a walk" : text; steps = 100 : nat64; temperature = 0.0 : float32; topp = 1.0 : float32; rng_seed = 0 : nat64;})' + // -> '(variant { ok = "..." : text })' + mockIC.run_test( + "inference 1a", inference, + "4449444c016c05b4e8c2e40373bbb885e80473a7f7b9a00878c5c8cea60878a4a3e1aa0b710100000000000000803f640000000000000000000000000000001b59657374657264617920492077656e7420666f7220612077616c6b", + "", silent_on_trap, my_principal); + + // ----------------------------------------------------------------------------------------- + // A new chat + // '()' -> '(variant { ok = 200 : nat16 })' + mockIC.run_test("new_chat", new_chat, "4449444c0000", + "4449444c016b019cc2017a010000c800", silent_on_trap, + my_principal); + // With temperature=0.0 & topp=0.9, still greedy argmax sampling -> the story will be the same every time + // '(record {prompt = "Yesterday I went for a walk" : text; steps = 100 : nat64; temperature = 0.0 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' + // -> '(variant { ok = "..." : text })' + mockIC.run_test( + "inference 2a", inference, + "4449444c016c05b4e8c2e40373bbb885e80473a7f7b9a00878c5c8cea60878a4a3e1aa0b710100000000006666663f640000000000000000000000000000001b59657374657264617920492077656e7420666f7220612077616c6b", + "", silent_on_trap, my_principal); + + // ----------------------------------------------------------------------------------------- + // A new chat + // '()' -> '(variant { ok = 200 : nat16 })' + mockIC.run_test("new_chat", new_chat, "4449444c0000", + "4449444c016b019cc2017a010000c800", silent_on_trap, + my_principal); + // With temperature>0.0 & topp=1.0: regular sampling + // '(record {prompt = "Yesterday I went for a walk" : text; steps = 100 : nat64; temperature = 0.9 : float32; topp = 1.0 : float32; rng_seed = 0 : nat64;})' + // -> --can not check on story-- + mockIC.run_test( + "inference 3a", inference, + "4449444c016c05b4e8c2e40373bbb885e80473a7f7b9a00878c5c8cea60878a4a3e1aa0b7101006666663f0000803f640000000000000000000000000000001b59657374657264617920492077656e7420666f7220612077616c6b", + "", silent_on_trap, my_principal); + + // ----------------------------------------------------------------------------------------- + // A new chat + // '()' -> '(variant { ok = 200 : nat16 })' + mockIC.run_test("new_chat", new_chat, "4449444c0000", + "4449444c016b019cc2017a010000c800", silent_on_trap, + my_principal); + // With temperature>0.0 & topp<1.0: top-pp (nucleus) sampling + // '(record {prompt = "Yesterday I went for a walk" : text; steps = 100 : nat64; temperature = 0.9 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})' + // -> --can not check on story-- + mockIC.run_test( + "inference 4a", inference, + "4449444c016c05b4e8c2e40373bbb885e80473a7f7b9a00878c5c8cea60878a4a3e1aa0b7101006666663f6666663f640000000000000000000000000000001b59657374657264617920492077656e7420666f7220612077616c6b", + "", silent_on_trap, my_principal); + + // ----------------------------------------------------------------------------------------- + // Users data + + // Verify that calls trap when not owner + mockIC.run_trap_test("get_user_count", get_user_count, "4449444c0000", + silent_on_trap, your_principal); + + mockIC.run_trap_test("get_user_ids", get_user_ids, "4449444c0000", + silent_on_trap, your_principal); + + mockIC.run_trap_test("get_user_metadata", get_user_metadata, + "4449444c000171093269626f372d646961", silent_on_trap, + your_principal); + + // '()' -> '(2 : nat64)' + mockIC.run_test("get_user_count", get_user_count, "4449444c0000", + "4449444c0001780200000000000000", silent_on_trap, + my_principal); + + /* + '()' -> + ( + vec { + "2ibo7-dia"; + "expmt-gtxsw-inftj-ttabj-qhp5s-nozup-n3bbo-k7zvn-dg4he-knac3-lae"; + }, + ) + */ + mockIC.run_test( + "get_user_ids", get_user_ids, "4449444c0000", + "4449444c016d71010002093269626f372d6469613f6578706d742d67747873772d696e66746a2d747461626a2d71687035732d6e6f7a75702d6e3362626f2d6b377a766e2d64673468652d6b6e6163332d6c6165", + silent_on_trap, my_principal); + + // '("2ibo7-dia")' -> ... two vectors of nat64 ... but we can not check time-stamp! + /* + ( + vec { + 1_695_424_351_661_183_242 : nat64; + 1_695_424_351_661_875_047 : nat64; + 1_695_424_351_885_991_917 : nat64; + }, + vec { 0 : nat64; 620 : nat64; 620 : nat64 }, + ) + */ + mockIC.run_test("get_user_metadata", get_user_metadata, + "4449444c000171093269626f372d646961", "", silent_on_trap, + my_principal); + + // ----------------------------------------------------------------------------------------- + // Reset the model + // '()' -> '(variant { ok = 200 : nat16 })' + mockIC.run_test("reset_model", reset_model, "4449444c0000", + "4449444c016b019cc2017a010000c800", silent_on_trap, + my_principal); + + // ----------------------------------------------------------------------------- + // returns 1 if any tests failed + return mockIC.test_summary(); +} \ No newline at end of file diff --git a/icpp_llama2/native/main.h b/icpp_llama2/native/main.h new file mode 100644 index 0000000..142973f --- /dev/null +++ b/icpp_llama2/native/main.h @@ -0,0 +1,2 @@ +// Main entry point for a native debug executable. +// Build it with: `icpp build-native` from the parent folder where 'icpp.toml' resides \ No newline at end of file diff --git a/icpp_llama2/requirements.txt b/icpp_llama2/requirements.txt new file mode 100644 index 0000000..2052ff2 --- /dev/null +++ b/icpp_llama2/requirements.txt @@ -0,0 +1,3 @@ +-r scripts/requirements.txt +icpp-pro +ic-py diff --git a/icpp_llama2/scripts/__init__.py b/icpp_llama2/scripts/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/icpp_llama2/scripts/ic_py_canister.py b/icpp_llama2/scripts/ic_py_canister.py new file mode 100644 index 0000000..ffcd160 --- /dev/null +++ b/icpp_llama2/scripts/ic_py_canister.py @@ -0,0 +1,98 @@ +"""Returns the ic-py Canister instance, for calling the endpoints.""" +import sys +import platform +import subprocess +from pathlib import Path +from typing import Optional +from ic.canister import Canister # type: ignore +from ic.client import Client # type: ignore +from ic.identity import Identity # type: ignore +from ic.agent import Agent # type: ignore +from icpp.run_shell_cmd import run_shell_cmd + +ROOT_PATH = Path(__file__).parent.parent + +# We use dfx to get some information. +# On Windows, dfx must be installed in wsl. +DFX = "dfx" +RUN_IN_POWERSHELL = False +if platform.win32_ver()[0]: + DFX = "wsl --% dfx" + RUN_IN_POWERSHELL = True + + +def run_dfx_command(cmd: str) -> Optional[str]: + """Runs dfx command as a subprocess""" + try: + return run_shell_cmd( + cmd, + capture_output=True, + run_in_powershell=RUN_IN_POWERSHELL, + ).rstrip("\n") + except subprocess.CalledProcessError as e: + print(f"Failed dfx command: '{cmd}' with error: \n{e.output}") + sys.exit(1) + return None + + +def get_canister( + canister_name: str, candid_path: Path, network: str = "local" +) -> Canister: + """Returns an ic_py Canister instance""" + + # Check if the network is up + print(f"--\nChecking if the {network} network is up...") + run_dfx_command(f"{DFX} ping {network} ") + print("Ok!") + + # Set the network URL + if network == "local": + replica_port = run_dfx_command(f"{DFX} info replica-port ") + replica_rev = run_dfx_command(f"{DFX} info replica-rev ") + webserver_port = run_dfx_command(f"{DFX} info webserver-port ") + networks_json_path = run_dfx_command(f"{DFX} info networks-json-path ") + print(f"replica-port = {replica_port}") + print(f"replica-rev = {replica_rev}") + print(f"webserver-port = {webserver_port}") + print(f"networks-json-path = {networks_json_path}") + + network_url = f"http://localhost:{replica_port}" + else: + # https://smartcontracts.org/docs/interface-spec/index.html#http-interface + network_url = "https://ic0.app" + + print(f"Network URL = {network_url}") + + # Get the name of the current identity + identity_whoami = run_dfx_command(f"{DFX} identity whoami ") + print(f"Using identity = {identity_whoami}") + + # Get the id of the canister + canister_id = run_dfx_command( + f"{DFX} canister --network {network} id {canister_name} " + ) + print(f"Canister ID = {canister_id}") + + # Get the private key of the current identity + private_key = run_dfx_command(f"{DFX} identity export {identity_whoami} ") + + # Create an Identity instance using the private key + identity = Identity.from_pem(private_key) + + # Create an HTTP client instance for making HTTPS calls to the IC + # https://smartcontracts.org/docs/interface-spec/index.html#http-interface + client = Client(url=network_url) + + # Create an IC agent to communicate with IC canisters + agent = Agent(identity, client) + + # Read canister's candid from file + with open( + candid_path, + "r", + encoding="utf-8", + ) as f: + canister_did = f.read() + + # Create a Canister instance + return Canister(agent=agent, canister_id=canister_id, candid=canister_did) diff --git a/icpp_llama2/scripts/icpp_llama2_sizer.py b/icpp_llama2/scripts/icpp_llama2_sizer.py new file mode 100644 index 0000000..0c7a760 --- /dev/null +++ b/icpp_llama2/scripts/icpp_llama2_sizer.py @@ -0,0 +1,266 @@ +"""Calculates the require resources to deploy a Llama2 model to an IC canister""" +# pylint: disable=invalid-name +import sys +import struct +from pathlib import Path +from typing import TextIO + +ROOT_PATH = Path(__file__).parent.parent + +# For 32 bit system +SIZE_OF_FLOAT = 4 # bytes +SIZE_OF_POINTER = 4 # bytes +SIZE_OF_BYTE_PIECES = 512 # bytes (static size) + + +def read_config_from_file(file_path: Path) -> dict[str, int]: + """ + Reads the Config structure from a binary file and returns it as a dictionary. + """ + with open(file_path, "rb") as f: + # Read the data corresponding to the Config struct + data: bytes = f.read(struct.calcsize("7i")) + config_values = struct.unpack("7i", data) + + config: dict[str, int] = { + "dim": config_values[0], + "hidden_dim": config_values[1], + "n_layers": config_values[2], + "n_heads": config_values[3], + "n_kv_heads": config_values[4], + "vocab_size": abs( + config_values[5] + ), # account for possible negative vocab_size + "seq_len": config_values[6], + } + return config + + +def calculate_memory(config: dict[str, int]) -> dict[str, dict[str, float]]: + """Calculate required memory for all the LLM components""" + # Tokenizer + vocab_memory = config["vocab_size"] * SIZE_OF_POINTER + vocab_scores_memory = config["vocab_size"] * SIZE_OF_FLOAT + + # TransformerWeights + head_size = config["dim"] / config["n_heads"] + n_layers = config["n_layers"] + + token_embedding_table = config["vocab_size"] * config["dim"] * SIZE_OF_FLOAT + rms_att_weight = n_layers * config["dim"] * SIZE_OF_FLOAT + wq = n_layers * config["dim"] * (config["n_heads"] * head_size) * SIZE_OF_FLOAT + wk = n_layers * config["dim"] * (config["n_kv_heads"] * head_size) * SIZE_OF_FLOAT + wv = wk # Same as wk + wo = n_layers * (config["n_heads"] * head_size) * config["dim"] * SIZE_OF_FLOAT + rms_ffn_weight = n_layers * config["dim"] * SIZE_OF_FLOAT + w1 = n_layers * config["dim"] * config["hidden_dim"] * SIZE_OF_FLOAT + w2 = n_layers * config["hidden_dim"] * config["dim"] * SIZE_OF_FLOAT + w3 = w1 # Same as w1 + rms_final_weight = config["dim"] * SIZE_OF_FLOAT + wcls = config["vocab_size"] * config["dim"] * SIZE_OF_FLOAT + + # RunState + kv_dim = (config["dim"] * config["n_kv_heads"]) / config["n_heads"] + x = config["dim"] * SIZE_OF_FLOAT + xb = x # Same as x + xb2 = x # Same as x + hb = config["hidden_dim"] * SIZE_OF_FLOAT + hb2 = hb # Same as hb + q = x # Same as x + k = kv_dim * SIZE_OF_FLOAT + v = k # Same as k + att = config["n_heads"] * config["seq_len"] * SIZE_OF_FLOAT + logits = config["vocab_size"] * SIZE_OF_FLOAT + key_cache = n_layers * config["seq_len"] * kv_dim * SIZE_OF_FLOAT + value_cache = key_cache # Same as key_cache + + # Calculate total memory usage for Tokenizer, TransformerWeights and RunState + total_tokenizer = vocab_memory + vocab_scores_memory + SIZE_OF_BYTE_PIECES + + total_transformer_weights = sum( + [ + token_embedding_table, + rms_att_weight, + wq, + wk, + wv, + wo, + rms_ffn_weight, + w1, + w2, + w3, + rms_final_weight, + wcls, + ] + ) + total_run_state = sum( + [x, xb, xb2, hb, hb2, q, k, v, att, logits, key_cache, value_cache] + ) + + # Collate the results in a dictionary + data: dict[str, dict[str, float]] = { + "Tokenizer Memory (per model)": { + "vocab_memory": vocab_memory / (1024 * 1024), + "vocab_scores_memory": vocab_scores_memory / (1024 * 1024), + }, + "TransformerWeights Memory (per model)": { + "token_embedding_table": token_embedding_table / (1024 * 1024), + "rms_att_weight": rms_att_weight / (1024 * 1024), + "wq": wq / (1024 * 1024), + "wk": wk / (1024 * 1024), + "wv": wv / (1024 * 1024), + "wo": wo / (1024 * 1024), + "rms_ffn_weight": rms_ffn_weight / (1024 * 1024), + "w1": w1 / (1024 * 1024), + "w2": w2 / (1024 * 1024), + "w3": w3 / (1024 * 1024), + "rms_final_weight": rms_final_weight / (1024 * 1024), + "wcls": wcls / (1024 * 1024), + }, + "RunState Memory (per user)": { + "x": x / (1024 * 1024), + "xb": xb / (1024 * 1024), + "xb2": xb2 / (1024 * 1024), + "hb": hb / (1024 * 1024), + "hb2": hb2 / (1024 * 1024), + "q": q / (1024 * 1024), + "k": k / (1024 * 1024), + "v": v / (1024 * 1024), + "att": att / (1024 * 1024), + "logits": logits / (1024 * 1024), + "key_cache": key_cache / (1024 * 1024), + "value_cache": value_cache / (1024 * 1024), + }, + "Total Memory": { + "Total Tokenizer Memory (per model)": total_tokenizer / (1024 * 1024), + "Total TransformerWeights Memory (per model)": total_transformer_weights + / (1024 * 1024), + "Total RunState Memory (per user)": total_run_state / (1024 * 1024), + "Overall Total Memory": (total_transformer_weights + total_run_state) + / (1024 * 1024), + }, + } + return data + + +def write_data(file: TextIO, title: str, data: dict[str, dict[str, float]]) -> None: + """Writes it all to a Markdown file""" + # Get the models for headers + headers = ["Memory Type"] + [f"{model}
(MB)" for model in data.keys()] + + # Write the table name + file.write(f"### {title}\n\n") + + # Write the headers + file.write(" | ".join(headers) + "\n") + file.write(" | ".join(["---"] * len(headers)) + "\n") + + # Assuming that all models have the same memory types, + # using the first model to get the list of memory types + memory_types = list(data[next(iter(data))].keys()) + + totals = {model: 0.0 for model in data.keys()} + + for mtype in memory_types: + row_data = [mtype] + [ + f"{model_data[mtype]:.2f}" for model_data in data.values() + ] + file.write(" | ".join(row_data) + "\n") + + # Accumulate totals for the first three tables + if title in [ + "Tokenizer Memory (per model)", + "TransformerWeights Memory (per model)", + "RunState Memory (per user)", + ]: + for model, value in zip( + data.keys(), + [model_data[mtype] for model_data in data.values()], + ): + totals[model] += value + + if title in [ + "Tokenizer Memory (per model)", + "TransformerWeights Memory (per model)", + "RunState Memory (per user)", + ]: + # Add the totals to the table + total_row = ["Total"] + [f"{totals[model]:.2f}" for model in data.keys()] + file.write(" | ".join(total_row) + "\n") + else: + # Calculate max users for each model + # Calculate number of users for each model and add it to the data + number_of_users = {} + for model, values in data.items(): + total_available_memory = 4 * 1024 # Available canister memory in MB + total_tokenizer_memory = values["Total Tokenizer Memory (per model)"] + total_transformer_weights_memory = values[ + "Total TransformerWeights Memory (per model)" + ] + total_runstate_memory = values["Total RunState Memory (per user)"] + + number_of_users[model] = int( + ( + total_available_memory + - total_tokenizer_memory + - total_transformer_weights_memory + ) + / total_runstate_memory + ) + + # Write the markdown table for number of users + file.write("\n\n") + # Get the models for headers + headers = ["Canister Metrics"] + [f"{model}
(MB)" for model in data.keys()] + + # Write the table name + file.write("### Canister Metrics\n\n") + + # Write the headers + file.write(" | ".join(headers) + "\n") + file.write(" | ".join(["---"] * len(headers)) + "\n") + + row_data = ["Max number of concurrent users"] + [ + f"{number_of_users[model]}" for model in data.keys() + ] + file.write(" | ".join(row_data) + "\n") + + file.write("\n\n") + + +def main() -> int: + """Reads the model.bin files and summarizes the resource requirements.""" + file_paths: dict[str, Path] = { + "260K": ROOT_PATH / "stories260K/stories260K.bin", + "15M": ROOT_PATH / "models/stories15M.bin", + "42M": ROOT_PATH / "models/stories42M.bin", + "110M": ROOT_PATH / "models/stories110M.bin", + } + + data = {} + for key, file_path in file_paths.items(): + config: dict[str, int] = read_config_from_file(file_path) + data[key] = calculate_memory(config) + + output_path = ROOT_PATH / "README_icpp_llama2_resource_requirements.md" + with open(output_path, "w") as file: + file.write("# Canister resource requirements for icpp_llama2.") + file.write("\n") + file.write("\nDo not edit this file. It is created with the command: ") + file.write("\n```bash") + file.write("\npython -m scripts.icpp_llama2_sizer") + file.write("\n```\n\n") + for key in [ + "Tokenizer Memory (per model)", + "TransformerWeights Memory (per model)", + "RunState Memory (per user)", + "Total Memory", + ]: + subset_data = {k: v[key] for k, v in data.items()} + write_data(file, key, subset_data) + + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/icpp_llama2/scripts/parse_args.py b/icpp_llama2/scripts/parse_args.py new file mode 100644 index 0000000..5471ebc --- /dev/null +++ b/icpp_llama2/scripts/parse_args.py @@ -0,0 +1,68 @@ +"""Import command line arguments for the scripts.""" + +import argparse + + +def parse_args() -> argparse.Namespace: + """Returns the command line arguments""" + parser = argparse.ArgumentParser(description="Load a model and set parameters") + parser.add_argument( + "--network", + type=str, + default="local", + help="Network: ic or local", + ) + parser.add_argument( + "--canister", + type=str, + default="llama2", + help="canister name", + ) + parser.add_argument( + "--candid", + type=str, + default="src/llama2.did", + help="canister's candid file", + ) + parser.add_argument( + "--model", + type=str, + default="models/stories15M.bin", + help="Model file (e.g. models/stories15M.bin)", + ) + parser.add_argument( + "--tokenizer", + type=str, + default="tokenizers/tokenizer.bin", + help="Tokenizer file (e.g. tokenizers/tokenizer.bin)", + ) + parser.add_argument( + "--chunksize", + type=float, + default=1.9, + help="Chunk Size for upload, in Mb", + ) + parser.add_argument( + "--temperature", type=float, default=0.9, help="Temperature (e.g. 1.0, or 0.0)" + ) + parser.add_argument( + "--topp", + type=float, + default=1.0, + help="p value in top-p (nucleus) sampling. default 1.0 (=off)", + ) + parser.add_argument( + "--steps", + type=int, + default=256, + help="Max number of steps to run for, 0: use seq_len", + ) + parser.add_argument( + "--rng-seed", + type=int, + default=0, + help="seed, 0: use random seed based on time", + ) + + args = parser.parse_args() + return args diff --git a/icpp_llama2/scripts/requirements.txt b/icpp_llama2/scripts/requirements.txt new file mode 100644 index 0000000..84d67a8 --- /dev/null +++ b/icpp_llama2/scripts/requirements.txt @@ -0,0 +1,19 @@ +requests +pandas +pandas-stubs +jupyterlab +jupyterlab-lsp +jupyter-black +python-lsp-server[all] +python-dotenv +tabulate +black +mypy +pylint==2.13.9 +matplotlib +fastparquet +openpyxl +seaborn +google-api-python-client +google-auth-httplib2 +google-auth-oauthlib \ No newline at end of file diff --git a/icpp_llama2/scripts/upload.py b/icpp_llama2/scripts/upload.py new file mode 100644 index 0000000..2386c0c --- /dev/null +++ b/icpp_llama2/scripts/upload.py @@ -0,0 +1,231 @@ +"""Uploads stories15M.bin & tokenizer.bin to the canister. + +Run with: + + python -m scripts.upload +""" + +# pylint: disable=invalid-name, too-few-public-methods, no-member, too-many-statements + +import sys +from pathlib import Path +from typing import Generator +from .ic_py_canister import get_canister +from .parse_args import parse_args + +ROOT_PATH = Path(__file__).parent.parent + +# 0 - none +# 1 - minimal +# 2 - a lot +DEBUG_VERBOSE = 1 + + +# ------------------------------------------------------------------------------ +def read_file_bytes(file_path: Path) -> bytes: + """Returns the stories15M.bin file as a bytes array""" + file_bytes = b"" + try: + with open(file_path, "rb") as file: + file_bytes = file.read() + + except FileNotFoundError: + print(f"Unable to open the file {file_path}!") + + return file_bytes + + +def generate_chunks(data: bytes, chunk_size: int) -> Generator[bytes, None, None]: + """Generator function to iterate over chunks""" + for i in range(0, len(data), chunk_size): + yield data[i : i + chunk_size] + + +def main() -> int: + """Uploads the model.""" + + args = parse_args() + + network = args.network + canister_name = args.canister + candid_path = ROOT_PATH / args.candid + model_path = ROOT_PATH / args.model + tokenizer_path = ROOT_PATH / args.tokenizer + chunk_size_mb = args.chunksize + temperature = args.temperature + topp = args.topp + steps = args.steps + rng_seed = args.rng_seed + + dfx_json_path = ROOT_PATH / "dfx.json" + + print( + f"Summary of upload task:" + f"\n - network = {network}" + f"\n - canister = {canister_name}" + f"\n - dfx_json_path = {dfx_json_path}" + f"\n - candid_path = {candid_path}" + f"\n - model_path = {model_path}" + f"\n - tokenizer_path = {tokenizer_path}" + f"\n - temperature = {temperature}" + f"\n - topp = {topp}" + f"\n - steps = {steps}" + f"\n - rng_seed = {rng_seed}" + ) + + # --------------------------------------------------------------------------- + # get ic-py based Canister instance + canister_llama2 = get_canister(canister_name, candid_path, network) + + # check health (liveness) + print("--\nChecking liveness of canister (did we deploy it!)") + response = canister_llama2.health() + if response == [True]: + print("Ok!") + else: + print("Not OK, response is:") + print(response) + + # --------------------------------------------------------------------------- + # THE MODEL FILE + + # Read the model from disk + print(f"--\nReading the model file into a bytes object: {model_path}") + model_bytes = read_file_bytes(model_path) + + # Reset the model + print("--\nResetting the model in canister") + response = canister_llama2.reset_model() # pylint: disable=no-member + if "ok" in response[0].keys(): + if DEBUG_VERBOSE >= 2: + print("OK!") + else: + print("Something went wrong:") + print(response) + sys.exit() + + # Upload model_bytes to the canister + print(f"--\nUploading the model bytes, in {chunk_size_mb}Mb chunks") + + # converting MB to bytes + chunk_size = int(chunk_size_mb * 1024 * 1024) + + # Iterate over all chunks + count_bytes = 0 + for i, chunk in enumerate(generate_chunks(model_bytes, chunk_size)): + count_bytes += len(chunk) + if DEBUG_VERBOSE == 0: + pass + elif DEBUG_VERBOSE == 1: + print( + f"chunk size = {len(chunk)} bytes " + f"({count_bytes / len(model_bytes) * 100:.1f}%)" + ) + else: + print("+++++++++++++++++++++++++++++++++++++++++++++++++++++") + print(f"Sending candid for {len(chunk)} bytes :") + print(f"- i = {i}") + print(f"- progress = {count_bytes / len(model_bytes) * 100:.1f}% ") + print(f"- chunk[0] = {chunk[0]}") + print(f"- chunk[-1] = {chunk[-1]}") + + response = canister_llama2.upload_model_bytes_chunk( + chunk + ) # pylint: disable=no-member + if "ok" in response[0].keys(): + if DEBUG_VERBOSE >= 2: + print("OK!") + else: + print("Something went wrong:") + print(response) + sys.exit() + + # --------------------------------------------------------------------------- + # THE TOKENIZER FILE + + # Read the tokenizer from disk + print(f"--\nReading the tokenizer file into a bytes object: {tokenizer_path}") + tokenizer_bytes = read_file_bytes(tokenizer_path) + + # Reset the tokenizer + print("--\nResetting the tokenizer in canister") + response = canister_llama2.reset_tokenizer() # pylint: disable=no-member + if "ok" in response[0].keys(): + if DEBUG_VERBOSE >= 2: + print("OK!") + else: + print("Something went wrong:") + print(response) + sys.exit() + + # Upload tokenizer_bytes to the canister + print("--\nUploading the tokenizer bytes") + + # converting MB to bytes + chunk_size = int(chunk_size_mb * 1024 * 1024) + + # Iterate over all chunks + count_bytes = 0 + for i, chunk in enumerate(generate_chunks(tokenizer_bytes, chunk_size)): + count_bytes += len(chunk) + if DEBUG_VERBOSE == 0: + pass + elif DEBUG_VERBOSE == 1: + print( + f"chunk size = {len(chunk)} bytes " + f"({count_bytes / len(tokenizer_bytes) * 100:.1f}%)" + ) + else: + print("+++++++++++++++++++++++++++++++++++++++++++++++++++++") + print(f"Sending candid for {len(chunk)} bytes :") + print(f"- i = {i}") + print(f"- progress = {count_bytes / len(tokenizer_bytes) * 100:.1f} % ") + print(f"- chunk[0] = {chunk[0]}") + print(f"- chunk[-1] = {chunk[-1]}") + + response = canister_llama2.upload_tokenizer_bytes_chunk( + chunk + ) # pylint: disable=no-member + if "ok" in response[0].keys(): + print("OK!") + else: + print("Something went wrong:") + print(response) + sys.exit() + + # --------------------------------------------------------------------------- + # Initialize the canister + print("--\nInitializing the canister, getting it ready for inference.") + response = canister_llama2.initialize() + if "ok" in response[0].keys(): + if DEBUG_VERBOSE >= 2: + print("OK!") + else: + print("Something went wrong:") + print(response) + sys.exit() + + # --------------------------------------------------------------------------- + # check readiness for inference + print("--\nChecking if the canister is ready for inference.") + response = canister_llama2.ready() + if response[0] is True: + if DEBUG_VERBOSE >= 2: + print("OK!") + else: + print("Something went wrong:") + print(response) + sys.exit() + # --------------------------------------------------------------------------- + print("--\nCongratulations, your llama2 canister is ready for inference!") + try: + print("💯 🎉 🏁") + except UnicodeEncodeError: + print(" ") + + # --------------------------------------------------------------------------- + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/icpp_llama2/src/canister.cpp b/icpp_llama2/src/canister.cpp new file mode 100644 index 0000000..f97a4fb --- /dev/null +++ b/icpp_llama2/src/canister.cpp @@ -0,0 +1,79 @@ +// canister_init, and health & ready endpoints +#include "canister.h" + +#include +#include +#include + +#include "chats.h" +#include "http.h" +#include "ic_api.h" + +std::string *p_owner_principal{nullptr}; +bool ready_for_inference{false}; + +void set_owner(IC_API &ic_api) { + CandidTypePrincipal caller = ic_api.get_caller(); + + if (p_owner_principal == nullptr) { + p_owner_principal = new (std::nothrow) std::string(); + if (p_owner_principal == nullptr) { + IC_API::trap("Allocation of p_owner_principal failed"); + } + } + *p_owner_principal = caller.get_text(); + + // IC_API::debug_print(std::string(__func__) + + // ": owner_principal = " + *p_owner_principal); +} + +bool is_owner(IC_API &ic_api, bool err_to_wire) { + CandidTypePrincipal caller = ic_api.get_caller(); + if (caller.get_text() == *p_owner_principal) return true; + else { + IC_API::debug_print(std::string(__func__) + + ": ERROR - caller is not the owner."); + + if (err_to_wire) { + uint16_t status_code = Http::StatusCode::Unauthorized; + ic_api.to_wire(CandidTypeVariant{"err", CandidTypeNat16{status_code}}); + } + return false; + } +} + +void print_canister_metadata() { + std::string msg = std::string(__func__) + ":"; + msg += "\n*p_owner_principal = " + *p_owner_principal; + IC_API::debug_print(msg); +} + +// -------------------------------------------------------------------------------------------------- +// See: https://internetcomputer.org/docs/current/references/ic-interface-spec#system-api-init +// - This method will be called automatically during INITIAL deployment +void canister_init() { + IC_API ic_api(CanisterInit{std::string(__func__)}, false); + set_owner(ic_api); + + // Create a p_chats instance + new_p_chats(); + + // Create a p_metadata_users instance + new_p_metadata_users(); +} + +// -------------------------------------------------------------------------------------------------- +// health endpoint (liveness) +void health() { + IC_API ic_api(CanisterQuery{std::string(__func__)}, false); + IC_API::debug_print("llama2 is healthy!"); + ic_api.to_wire(CandidTypeBool{true}); +} + +// readiness endpoint (ready for inference) +void ready() { + IC_API ic_api(CanisterQuery{std::string(__func__)}, false); + IC_API::debug_print("llama2 readiness for inference = " + + std::to_string(ready_for_inference)); + ic_api.to_wire(CandidTypeBool{ready_for_inference}); +} \ No newline at end of file diff --git a/icpp_llama2/src/canister.h b/icpp_llama2/src/canister.h new file mode 100644 index 0000000..3f9b7c6 --- /dev/null +++ b/icpp_llama2/src/canister.h @@ -0,0 +1,14 @@ +#pragma once + +#include "ic_api.h" +#include "wasm_symbol.h" +#include + +extern std::string *p_owner_principal; +extern bool ready_for_inference; + +bool is_owner(IC_API &ic_api, bool err_to_wire = true); + +void canister_init() WASM_SYMBOL_EXPORTED("canister_init"); +void health() WASM_SYMBOL_EXPORTED("canister_query health"); +void ready() WASM_SYMBOL_EXPORTED("canister_query ready"); \ No newline at end of file diff --git a/icpp_llama2/src/chats.cpp b/icpp_llama2/src/chats.cpp new file mode 100644 index 0000000..c62e74a --- /dev/null +++ b/icpp_llama2/src/chats.cpp @@ -0,0 +1,147 @@ +// Maintain one chat per user (principal) in Orthogonal Persistence + +#include "chats.h" +#include "canister.h" +#include "http.h" +#include "ic_api.h" + +// umap for Orthogonally Persisted chat data, per principal +Chats *p_chats{nullptr}; +MetadataUsers *p_metadata_users{nullptr}; + +// Create a p_chats instance if not yet done +void new_p_chats() { + if (p_chats == nullptr) { + IC_API::debug_print(std::string(__func__) + ": Creating p_chats instance."); + p_chats = new (std::nothrow) Chats(); + if (p_chats == nullptr) { + IC_API::trap("Allocation of p_chats failed"); + } + } +} + +// Delete the p_chats instance +void delete_p_chats() { + if (p_chats) { + for (auto &pair : p_chats->umap) { + const std::string &principal = pair.first; + Chat &chat = pair.second; + free_run_state(&chat.state); + } + delete p_chats; + p_chats = nullptr; + } +} + +// Create a p_metadata_users instance if not yet done +void new_p_metadata_users() { + if (p_metadata_users == nullptr) { + IC_API::debug_print(std::string(__func__) + + ": Creating p_metadata_users instance."); + p_metadata_users = new (std::nothrow) MetadataUsers(); + if (p_metadata_users == nullptr) { + IC_API::trap("Allocation of p_metadata_users failed"); + } + } +} + +// Delete the p_metadata_users instance +void delete_p_metadata_users() { + if (p_metadata_users) { + delete p_metadata_users; + p_metadata_users = nullptr; + } +} + +void init_run_state(RunState *s) { + s->x = nullptr; + s->xb = nullptr; + s->xb2 = nullptr; + s->hb = nullptr; + s->hb2 = nullptr; + s->q = nullptr; + s->k = nullptr; + s->v = nullptr; + s->att = nullptr; + s->logits = nullptr; + s->key_cache = nullptr; + s->value_cache = nullptr; +} + +void build_new_chat(std::string principal) { + // -------------------------------------------------------------------------- + // Create entries for this principal in the persisted memory, if not yet done + if (p_chats && p_chats->umap.find(principal) == p_chats->umap.end()) { + // Does not yet exist + Chat chat; + init_run_state(&chat.state); + p_chats->umap[principal] = chat; + } + + if (p_metadata_users && + p_metadata_users->umap.find(principal) == p_metadata_users->umap.end()) { + // Does not yet exist + MetadataUser metadata_user; + p_metadata_users->umap[principal] = metadata_user; + } + + // -------------------------------------------------------------------------- + // The New Chat data + Chat *chat = &p_chats->umap[principal]; + free_run_state(&chat->state); + malloc_run_state(&chat->state, &transformer.config); + + //initialize the next token predicted on pos 0 to the BOS token (1) + chat->next = 1; + chat->pos = 0; + + //icpp: initialize to add begin-of-sentence + chat->bos = 1; // We no longer use this... + chat->eos = 0; + + //icpp: initialize total_steps + chat->total_steps = 0; + + // -------------------------------------------------------------------------- + // The New Chat metadata + MetadataUser *metadata_user = &p_metadata_users->umap[principal]; + MetadataChat metadata_chat; + metadata_chat.start_time = IC_API::time(); // time in ns + metadata_user->metadata_chats.push_back(metadata_chat); +} + +bool is_ready_and_authorized(IC_API ic_api) { + + if (!ready_for_inference) { + ic_api.to_wire(CandidTypeVariant{ + "err", CandidTypeText{ + "The Llama2 canister is not (yet) ready for inference."}}); + return false; + } + + // Anonymous user is not allowed + CandidTypePrincipal caller = ic_api.get_caller(); + if (caller.is_anonymous()) { + ic_api.to_wire(CandidTypeVariant{ + "err", + CandidTypeText{ + "The Llama2 canister does not allow calling with anonymous principal."}}); + return false; + } + + return true; +} + +// Endpoint to be called by user when starting a new chat +void new_chat() { + IC_API ic_api(CanisterUpdate{std::string(__func__)}, false); + if (!is_ready_and_authorized(ic_api)) return; + + CandidTypePrincipal caller = ic_api.get_caller(); + std::string principal = caller.get_text(); + + build_new_chat(principal); + + ic_api.to_wire( + CandidTypeVariant{"ok", CandidTypeNat16{Http::StatusCode::OK}}); +} \ No newline at end of file diff --git a/icpp_llama2/src/chats.h b/icpp_llama2/src/chats.h new file mode 100644 index 0000000..a50dbe0 --- /dev/null +++ b/icpp_llama2/src/chats.h @@ -0,0 +1,51 @@ +#pragma once + +#include +#include + +#include "ic_api.h" +#include "run.h" +#include "wasm_symbol.h" + +void new_chat() WASM_SYMBOL_EXPORTED("canister_update new_chat"); + +// Orthogonally persisted user data +// --- +// Chats: For each registered user, data of their currently active chat +// (-) A user can have only 1 active chat at a time +// (-) Multiple users can be chatting at the same time +// (-) When a user starts a new chat, their previous ActiveChat will be cleared +// Note: Chat is a struct defined in run.h, because it needs to be available to run.c +class Chats { +public: + std::unordered_map umap; +}; +extern Chats *p_chats; + +// --- +// Some minimal usage data: umap[principal, MetaDataChat] + +// Metadata for the full chat, which can be one or more prompts +struct MetadataChat { + uint64_t start_time{0}; // time in ns + uint64_t total_steps{0}; // total number of steps (=tokens) +}; + +// Metadata for the User, containing a vector of all chats' metadata +struct MetadataUser { + std::vector metadata_chats; +}; + +class MetadataUsers { +public: + std::unordered_map umap; +}; +extern MetadataUsers *p_metadata_users; +// --- + +void new_p_chats(); +void delete_p_chats(); +void new_p_metadata_users(); +void delete_p_metadata_users(); +void build_new_chat(std::string principal); +bool is_ready_and_authorized(IC_API ic_api); \ No newline at end of file diff --git a/icpp_llama2/src/http.cpp b/icpp_llama2/src/http.cpp new file mode 100644 index 0000000..3f93e0a --- /dev/null +++ b/icpp_llama2/src/http.cpp @@ -0,0 +1,5 @@ +// Endpoints return familiar HTTP status codes in case of errors +#include "http.h" + +Http::Http() {} +Http::~Http() {} diff --git a/icpp_llama2/src/http.h b/icpp_llama2/src/http.h new file mode 100644 index 0000000..e114c84 --- /dev/null +++ b/icpp_llama2/src/http.h @@ -0,0 +1,79 @@ +#pragma once + +#include + +class Http { +public: + Http(); + ~Http(); + + enum StatusCode : uint16_t { + Continue = 100, + SwitchingProtocols = 101, + Processing = 102, + EarlyHints = 103, + + OK = 200, + Created = 201, + Accepted = 202, + NonAuthoritativeInfo = 203, + NoContent = 204, + ResetContent = 205, + PartialContent = 206, + MultiStatus = 207, + AlreadyReported = 208, + IMUsed = 226, + + MultipleChoices = 300, + MovedPermanently = 301, + Found = 302, + SeeOther = 303, + NotModified = 304, + UseProxy = 305, + + TemporaryRedirect = 307, + PermanentRedirect = 308, + + BadRequest = 400, + Unauthorized = 401, + PaymentRequired = 402, + Forbidden = 403, + NotFound = 404, + MethodNotAllowed = 405, + NotAcceptable = 406, + ProxyAuthRequired = 407, + RequestTimeout = 408, + Conflict = 409, + Gone = 410, + LengthRequired = 411, + PreconditionFailed = 412, + RequestEntityTooLarge = 413, + RequestURITooLong = 414, + UnsupportedMediaType = 415, + RequestedRangeNotSatisfiable = 416, + ExpectationFailed = 417, + Teapot = 418, + MisdirectedRequest = 421, + UnprocessableEntity = 422, + Locked = 423, + FailedDependency = 424, + TooEarly = 425, + UpgradeRequired = 426, + PreconditionRequired = 428, + TooManyRequests = 429, + RequestHeaderFieldsTooLarge = 431, + UnavailableForLegalReasons = 451, + + InternalServerError = 500, + NotImplemented = 501, + BadGateway = 502, + ServiceUnavailable = 503, + GatewayTimeout = 504, + HTTPVersionNotSupported = 505, + VariantAlsoNegotiates = 506, + InsufficientStorage = 507, + LoopDetected = 508, + NotExtended = 510, + NetworkAuthenticationRequired = 511 + }; +}; \ No newline at end of file diff --git a/icpp_llama2/src/inference.cpp b/icpp_llama2/src/inference.cpp new file mode 100644 index 0000000..36f1627 --- /dev/null +++ b/icpp_llama2/src/inference.cpp @@ -0,0 +1,235 @@ +// Inference endpoint generating a token string for a given prompt + +#include "inference.h" + +#include +#include +#include + +#include "canister.h" +#include "chats.h" +#include "http.h" +#include "initialize.h" +#include "run.h" +#include "upload.h" + +#include "ic_api.h" + +class Prompt { +public: + std::string prompt{""}; + uint64_t steps{256}; + float temperature{1.0}; + float topp{0.9}; + uint64_t rng_seed{0}; +}; + +void print_prompt(const Prompt &wire_prompt) { + std::string msg = std::string(__func__) + "- model config:"; + msg += "\nwire_prompt.prompt = " + wire_prompt.prompt; + msg += "\nwire_prompt.steps = " + std::to_string(wire_prompt.steps); + msg += + "\nwire_prompt.temperature = " + std::to_string(wire_prompt.temperature); + msg += "\nwire_prompt.topp = " + std::to_string(wire_prompt.topp); + msg += "\nwire_prompt.rng_seed = " + std::to_string(wire_prompt.rng_seed); + IC_API::debug_print(msg); +} + +// Replacement for run.c safe_printf +std::string safe_stringify(const char *piece) { + std::string result; + + // piece might be a raw byte token, and we only want to convert printable chars or whitespace + // because some of the other bytes can be various control codes, backspace, etc. + if (piece == NULL) { + return result; + } + + if (piece[0] == '\0') { + return result; + } + + if (piece[1] == '\0') { + unsigned char byte_val = piece[0]; + if (!(isprint(byte_val) || isspace(byte_val))) { + return result; // bad byte, don't include it in the result + } + } + + result = piece; // Assign the valid string to the result + return result; +} + +// Copied from run.c and modified slightly +std::string generate(IC_API ic_api, Chat *chat, Transformer *transformer, + Tokenizer *tokenizer, Sampler *sampler, std::string prompt, + int steps) { + std::string output; + + // encode the (string) prompt into tokens sequence + int num_prompt_tokens = 0; + + // +3 for '\0', ?BOS, ?EOS + int *prompt_tokens = (int *)malloc((prompt.length() + 3) * sizeof(int)); + if (!prompt_tokens) + IC_API::trap("Failed to allocate memory for prompt_tokens."); + // We do not pass bos, but next, which is 1 after new_chat, else last token of previous call + encode(tokenizer, prompt.c_str(), chat->next, chat->eos, prompt_tokens, + &num_prompt_tokens); + + // icpp: make sure we do not re-add bos next time, unless reset by new_chat + chat->bos = 0; + chat->eos = 0; + + int token = chat->next; // token that was predicted last, or BOS + int pos = chat->pos; // position in the total sequence + int prompt_pos = 0; // position in the current prompt + // if (num_prompt_tokens > 0) { + // token = prompt_tokens + // [prompt_pos]; // kick off with the first token in the prompt + // } + + chat->total_steps += num_prompt_tokens + steps; + // override to ~max length + if (chat->total_steps > transformer->config.seq_len) + chat->total_steps = transformer->config.seq_len; + + // start the main loop + long start = + 0; // used to time our code, only initialized after first iteration + int next; // will store the next token in the sequence + // icpp: use -1, so the exact prompt will be returned when steps is 0 + // this is critical when building the prompt in multiple calls + while (pos < chat->total_steps - 1) { + + // forward the transformer to get logits for the next token + float *logits = forward(chat, transformer, token, pos); + + // advance the state state machine + if (prompt_pos < num_prompt_tokens - 1) { + // if we are still processing the input prompt, force the next prompt token + next = prompt_tokens[prompt_pos + 1]; + prompt_pos++; + } else { + // icpp: stop if we have exhausted the prompt_tokens, and caller did not ask for + // any additional steps to be generated + if (steps == 0) { + break; + } + // otherwise sample the next token from the logits + next = sample(sampler, logits); + } + pos++; + + // data-dependent terminating condition: the BOS (=1) token delimits sequences + if (next == 1) { + break; + } + + // print the token as string, decode it with the Tokenizer object + char *piece = decode(tokenizer, token, next); + // safe_printf(piece); // same as printf("%s", piece), but skips "unsafe" bytes + output += safe_stringify(piece); + + // fflush(stdout); + token = next; + + // safe state in the chat, used in follow-up calls to the endpoint + chat->next = next; + chat->pos = pos; + + // init the timer here because the first iteration can be slower + // if (start == 0) { start = time_in_ms(); } + } + // printf("\n"); + // output += "\n"; // icpp: don't do this... we're continuining in next call + + // report achieved tok/s (pos-1 because the timer starts after first iteration) + // if (pos > 1) { + // long end = time_in_ms(); + // fprintf(stderr, "achieved tok/s: %f\n", (pos-1) / (double)(end-start)*1000); + // } + + free(prompt_tokens); + + return output; +} + +// Based on a given prompt, llama2 will generate a token string +void inference() { + IC_API ic_api(CanisterUpdate{std::string(__func__)}, false); + if (!is_ready_and_authorized(ic_api)) return; + + CandidTypePrincipal caller = ic_api.get_caller(); + std::string principal = caller.get_text(); + + if (p_chats && p_chats->umap.find(principal) == p_chats->umap.end()) { + // Does not yet exist + build_new_chat(principal); + } + Chat *chat = &p_chats->umap[principal]; + + // Get the Prompt from the wire + Prompt wire_prompt; + CandidTypeRecord r_in; + r_in.append("prompt", CandidTypeText{&wire_prompt.prompt}); + r_in.append("steps", CandidTypeNat64{&wire_prompt.steps}); + r_in.append("temperature", CandidTypeFloat32{&wire_prompt.temperature}); + r_in.append("topp", CandidTypeFloat32{&wire_prompt.topp}); + r_in.append("rng_seed", CandidTypeNat64{&wire_prompt.rng_seed}); + ic_api.from_wire(r_in); + // print_prompt(wire_prompt); + + // parameter validation/overrides + if (wire_prompt.rng_seed <= 0) + wire_prompt.rng_seed = ic_api.time(); // time in ns + if (wire_prompt.temperature < 0.0) wire_prompt.temperature = 0.0; + if (wire_prompt.topp < 0.0 || 1.0 < wire_prompt.topp) wire_prompt.topp = 0.9; + if (wire_prompt.steps < 0) wire_prompt.steps = 0; + + // icpp: if caller provides a prompt , set bos & eos + // if (wire_prompt.prompt.size() > 0) { + // transformer.bos = 1; + // transformer.eos = 1; + // } + + // icpp: We treat 'steps' as additional steps to generate + // Do this check inside generate method + // if (wire_prompt.steps == 0 || wire_prompt.steps > transformer.config.seq_len) + // wire_prompt.steps = transformer.config.seq_len; // override to ~max length + // IC_API::debug_print("--\nAfter parameter validation/overrides."); + // print_prompt(wire_prompt); + + // build the Sampler + Sampler sampler; + build_sampler(&sampler, transformer.config.vocab_size, + wire_prompt.temperature, wire_prompt.topp, + wire_prompt.rng_seed); + + // run! + std::string output; + // if (mode == "generate") { + output += generate(ic_api, chat, &transformer, &tokenizer, &sampler, + wire_prompt.prompt, wire_prompt.steps); + // } else if (mode =="chat") { + // chat(&transformer, &tokenizer, &sampler, prompt, system_prompt, steps); + // } else { + // IC_API::trap("unsupported mode: " + mode); + // } + + // Now we have the total_steps, stored with the chat + // And we can update the metadata_user + MetadataUser *metadata_user = &p_metadata_users->umap[principal]; + if (!metadata_user->metadata_chats.empty()) { + MetadataChat &metadata_chat = metadata_user->metadata_chats.back(); + metadata_chat.total_steps += chat->total_steps; + } + + // memory and file handles cleanup + free_sampler(&sampler); + + // IC_API::debug_print(output); + + // Return the generated response + ic_api.to_wire(CandidTypeVariant{"ok", CandidTypeText{output}}); +} diff --git a/icpp_llama2/src/inference.h b/icpp_llama2/src/inference.h new file mode 100644 index 0000000..a4f3519 --- /dev/null +++ b/icpp_llama2/src/inference.h @@ -0,0 +1,6 @@ +#pragma once + +#include "wasm_symbol.h" +#include + +void inference() WASM_SYMBOL_EXPORTED("canister_update inference"); \ No newline at end of file diff --git a/icpp_llama2/src/initialize.cpp b/icpp_llama2/src/initialize.cpp new file mode 100644 index 0000000..a39c8d7 --- /dev/null +++ b/icpp_llama2/src/initialize.cpp @@ -0,0 +1,214 @@ +// Initializes llama2's config, weights & tokenizer with the uploaded file-bytes + +#include "initialize.h" + +#include +#include +#include + +#include "canister.h" +#include "chats.h" +#include "http.h" +#include "ic_api.h" +#include "upload.h" + +#include "run.h" + +// Orthogonally persisted model data +Transformer transformer; +Tokenizer tokenizer; + +// ----------------------------------------------------------------------- + +// This is an exact copy of code in this method run.c, +// Modified to read the data from the uploaded tokenizer.bin bytes +void build_tokenizer(Tokenizer *t, int vocab_size) { + // i should have written the vocab_size into the tokenizer file... sigh + t->vocab_size = vocab_size; + // malloc space to hold the scores and the strings + t->vocab = (char **)malloc(vocab_size * sizeof(char *)); + if (!t->vocab) IC_API::trap("Failed to allocate memory for vocab."); + t->vocab_scores = (float *)malloc(vocab_size * sizeof(float)); + if (!t->vocab_scores) + IC_API::trap("Failed to allocate memory for vocab_scores."); + for (int i = 0; i < 256; i++) { + t->byte_pieces[i * 2] = (unsigned char)i; + t->byte_pieces[i * 2 + 1] = '\0'; + } + + // read in the file + // FILE *file = fopen(tokenizer_path, "rb"); + // if (!file) { + // fprintf(stderr, "couldn't load %s\n", tokenizer_path); + // exit(EXIT_FAILURE); + // } + // create a pointer to the start of the vector data + const uint8_t *data_ptr = p_tokenizer_bytes->vec.data(); + + // if (fread(&t->max_token_length, sizeof(int), 1, file) != 1) { + // fprintf(stderr, "failed read\n"); + // exit(EXIT_FAILURE); + // } + // read max_token_length from data + memcpy(&t->max_token_length, data_ptr, sizeof(int)); + data_ptr += sizeof(int); + + int len; + for (int i = 0; i < vocab_size; i++) { + // if (fread(t->vocab_scores + i, sizeof(float), 1, file) != 1) { + // fprintf(stderr, "failed read\n"); + // exit(EXIT_FAILURE); + // } + memcpy(t->vocab_scores + i, data_ptr, sizeof(float)); + data_ptr += sizeof(float); + + // if (fread(&len, sizeof(int), 1, file) != 1) { + // fprintf(stderr, "failed read\n"); + // exit(EXIT_FAILURE); + // } + memcpy(&len, data_ptr, sizeof(int)); + data_ptr += sizeof(int); + + t->vocab[i] = (char *)malloc(len + 1); + if (!t->vocab[i]) + IC_API::trap("Failed to allocate memory for vocab[" + std::to_string(i) + + "]."); + // if (fread(t->vocab[i], len, 1, file) != 1) { + // fprintf(stderr, "failed read\n"); + // exit(EXIT_FAILURE); + // } + memcpy(t->vocab[i], data_ptr, len); + data_ptr += len; + + t->vocab[i][len] = '\0'; // add the string terminating token + } + // fclose(file); + + // Do this now, and not lazily + // malloc and sort the vocabulary + t->sorted_vocab = (TokenIndex *)malloc(t->vocab_size * sizeof(TokenIndex)); + if (!t->sorted_vocab) + IC_API::trap("Failed to allocate memory for sorted_vocab."); + + for (int i = 0; i < t->vocab_size; i++) { + t->sorted_vocab[i].str = t->vocab[i]; + t->sorted_vocab[i].id = i; + } + qsort(t->sorted_vocab, t->vocab_size, sizeof(TokenIndex), compare_tokens); +} + +// This is an exact copy of code in these methods of run.c +// - read_checkpoint +// - build_transformer +// - free_transformer +// Modified to read the data from the uploaded tokenizer.bin bytes +void read_checkpoint(Config *config, TransformerWeights *weights) { + // FILE *file = fopen(checkpoint, "rb"); + // if (!file) { + // fprintf(stderr, "Couldn't open file %s\n", checkpoint); + // exit(EXIT_FAILURE); + // } + // // read in the config header + // if (fread(config, sizeof(Config), 1, file) != 1) { + // exit(EXIT_FAILURE); + // } + // Copy the data into config + int *data = reinterpret_cast(p_model_bytes->vec.data()); + memcpy(config, data, sizeof(Config)); + + IC_API::debug_print("-------------------------------------"); + IC_API::debug_print("config.dim = " + std::to_string(config->dim)); + IC_API::debug_print("config.hidden_dim = " + + std::to_string(config->hidden_dim)); + IC_API::debug_print("config.n_layers = " + + std::to_string(config->n_layers)); + IC_API::debug_print("config.n_heads = " + std::to_string(config->n_heads)); + IC_API::debug_print("config.n_kv_heads = " + + std::to_string(config->n_kv_heads)); + IC_API::debug_print("config.vocab_size = " + + std::to_string(config->vocab_size)); + IC_API::debug_print("config.seq_len = " + std::to_string(config->seq_len)); + IC_API::debug_print("-------------------------------------"); + + // negative vocab size is hacky way of signaling unshared weights. bit yikes. + int shared_weights = config->vocab_size > 0 ? 1 : 0; + config->vocab_size = abs(config->vocab_size); + // // figure out the file size + // fseek(file, 0, SEEK_END); // move file pointer to end of file + // *file_size = ftell(file); // get the file size, in bytes + // fclose(file); + // // memory map the Transformer weights into the data pointer + // *fd = open(checkpoint, O_RDONLY); // open in read only mode + // if (*fd == -1) { + // fprintf(stderr, "open failed!\n"); + // exit(EXIT_FAILURE); + // } + // *data = mmap(NULL, *file_size, PROT_READ, MAP_PRIVATE, *fd, 0); + // if (*data == MAP_FAILED) { + // fprintf(stderr, "mmap failed!\n"); + // exit(EXIT_FAILURE); + // } + // float *weights_ptr = *data + sizeof(Config) / sizeof(float); + // Copy the data into weights + float *weights_ptr = + reinterpret_cast(data + sizeof(Config) / sizeof(int)); + + memory_map_weights(weights, config, weights_ptr, shared_weights); +} + +void build_transformer(Transformer *t) { + // read in the Config and the Weights from the checkpoint + read_checkpoint(&t->config, &t->weights); + + // icpp: moved into build_active_chat + // // allocate the RunState buffers + // malloc_run_state(&t->state, &t->config); + + // //icpp: initialize the token generation settings + // reset_tokens(t); +} + +void initialize() { + IC_API ic_api(CanisterUpdate{std::string(__func__)}, false); + if (!is_owner(ic_api)) return; + + build_transformer(&transformer); + build_tokenizer(&tokenizer, transformer.config.vocab_size); + + ready_for_inference = true; + + ic_api.to_wire( + CandidTypeVariant{"ok", CandidTypeNat16{Http::StatusCode::OK}}); +} + +void print_config() { + Config config = transformer.config; + std::string msg = std::string(__func__) + "model config:"; + msg += "\nconfig.dim = " + std::to_string(config.dim); + msg += "\nconfig.hidden_dim = " + std::to_string(config.hidden_dim); + msg += "\nconfig.n_layers = " + std::to_string(config.n_layers); + msg += "\nconfig.n_heads = " + std::to_string(config.n_heads); + msg += "\nconfig.n_kv_heads = " + std::to_string(config.n_kv_heads); + msg += "\nconfig.vocab_size = " + std::to_string(config.vocab_size); + msg += "\nconfig.seq_len = " + std::to_string(config.seq_len); + IC_API::debug_print(msg); +} + +void get_model_config() { + IC_API ic_api(CanisterQuery{std::string(__func__)}, false); + CandidTypePrincipal caller = ic_api.get_caller(); + std::string principal = caller.get_text(); + + print_config(); + + CandidTypeRecord r_out; + Config config = transformer.config; + r_out.append("dim", CandidTypeInt{config.dim}); + r_out.append("hidden_dim", CandidTypeInt{config.hidden_dim}); + r_out.append("n_layers", CandidTypeInt{config.n_layers}); + r_out.append("n_heads", CandidTypeInt{config.n_heads}); + r_out.append("n_kv_heads", CandidTypeInt{config.n_kv_heads}); + r_out.append("vocab_size", CandidTypeInt{config.vocab_size}); + r_out.append("seq_len", CandidTypeInt{config.seq_len}); + ic_api.to_wire(r_out); +} \ No newline at end of file diff --git a/icpp_llama2/src/initialize.h b/icpp_llama2/src/initialize.h new file mode 100644 index 0000000..58a8559 --- /dev/null +++ b/icpp_llama2/src/initialize.h @@ -0,0 +1,9 @@ +#pragma once + +#include "wasm_symbol.h" +#include + +#include "run.h" + +void initialize() WASM_SYMBOL_EXPORTED("canister_update initialize"); +void get_model_config() WASM_SYMBOL_EXPORTED("canister_query get_model_config"); \ No newline at end of file diff --git a/icpp_llama2/src/llama2.did b/icpp_llama2/src/llama2.did new file mode 100644 index 0000000..fa2a5c3 --- /dev/null +++ b/icpp_llama2/src/llama2.did @@ -0,0 +1,56 @@ +// Candid interface of the canister endpoints +// https://internetcomputer.org/docs/current/references/candid-ref/ + +type Prompt = + record { + prompt : text; + steps : nat64; + temperature : float32; + topp : float32; + rng_seed : nat64; + }; + +type Inference = + variant { + err: text; + ok: text; + }; + +type Config = + record { + dim : int; + hidden_dim : int; + n_layers : int; + n_heads : int; + n_kv_heads : int; + vocab_size : int; + seq_len : int; + }; + +type StatusCode = nat16; + +type Result = + variant { + err: StatusCode; + ok: StatusCode; + }; + +type ChatStartTime = nat64; +type ChatTotalSteps = nat64; + +service : { + canister_init: () -> (); + health: () -> (bool); + ready: () -> (bool); + reset_model: () -> (Result); + reset_tokenizer: () -> (Result); + upload_model_bytes_chunk: (vec nat8) -> (Result); + upload_tokenizer_bytes_chunk: (vec nat8) -> (Result); + initialize: () -> (Result); + new_chat: () -> (Result); + get_model_config: () -> (Config) query; + inference: (Prompt) -> (Inference); + get_user_count: () -> (nat64) query; + get_user_ids: () -> (vec text) query; + get_user_metadata: (text) -> (vec ChatStartTime, vec ChatTotalSteps) query; +} \ No newline at end of file diff --git a/icpp_llama2/src/run.c b/icpp_llama2/src/run.c new file mode 100644 index 0000000..be48369 --- /dev/null +++ b/icpp_llama2/src/run.c @@ -0,0 +1,1018 @@ +/* Inference for Llama-2 Transformer model in pure C */ +/* +Slightly modified copy from: https://github.com/karpathy/llama2.c + +(-) Externalized declarations into "run.h", for use by the Canister's C++ code. +(-) Avoid using printf +(-) No main function +(-) No reading of files + -> They are uploaded separately to the canister and stored in memory (See README) + +That's it. Everything else is identical... + +*/ +// clang-format off +#include "run.h" // ICPP + +#include +#include +#include +#include +#include +#include +#include +// ICPP: no need for mmap to get data from files. +// we already have all bytes uploaded & store in a +// std::vector that is orthogonally persisted +// #if defined _WIN32 +// #include "win.h" +// #else +// #include +// #include +// #endif + +// ---------------------------------------------------------------------------- +// Transformer model + +// Moved into run.h +// typedef struct { +// int dim; // transformer dimension +// int hidden_dim; // for ffn layers +// int n_layers; // number of layers +// int n_heads; // number of query heads +// int n_kv_heads; // number of key/value heads (can be < query heads because of multiquery) +// int vocab_size; // vocabulary size, usually 256 (byte-level) +// int seq_len; // max sequence length +// } Config; + +// typedef struct { +// // token embedding table +// float* token_embedding_table; // (vocab_size, dim) +// // weights for rmsnorms +// float* rms_att_weight; // (layer, dim) rmsnorm weights +// float* rms_ffn_weight; // (layer, dim) +// // weights for matmuls. note dim == n_heads * head_size +// float* wq; // (layer, dim, n_heads * head_size) +// float* wk; // (layer, dim, n_kv_heads * head_size) +// float* wv; // (layer, dim, n_kv_heads * head_size) +// float* wo; // (layer, n_heads * head_size, dim) +// // weights for ffn +// float* w1; // (layer, hidden_dim, dim) +// float* w2; // (layer, dim, hidden_dim) +// float* w3; // (layer, hidden_dim, dim) +// // final rmsnorm +// float* rms_final_weight; // (dim,) +// // (optional) classifier weights for the logits, on the last layer +// float* wcls; +// } TransformerWeights; + +// typedef struct { +// // current wave of activations +// float *x; // activation at current time stamp (dim,) +// float *xb; // same, but inside a residual branch (dim,) +// float *xb2; // an additional buffer just for convenience (dim,) +// float *hb; // buffer for hidden dimension in the ffn (hidden_dim,) +// float *hb2; // buffer for hidden dimension in the ffn (hidden_dim,) +// float *q; // query (dim,) +// float *k; // key (dim,) +// float *v; // value (dim,) +// float *att; // buffer for scores/attention values (n_heads, seq_len) +// float *logits; // output logits +// // kv cache +// float* key_cache; // (layer, seq_len, dim) +// float* value_cache; // (layer, seq_len, dim) +// } RunState; + +// typedef struct { +// Config config; // the hyperparameters of the architecture (the blueprint) +// TransformerWeights weights; // the weights of the model +// RunState state; // buffers for the "wave" of activations in the forward pass +// // some more state needed to properly clean up the memory mapping (sigh) +// int fd; // file descriptor for memory mapping +// float* data; // memory mapped data pointer +// ssize_t file_size; // size of the checkpoint file in bytes +// } Transformer; + +bool malloc_run_state(RunState* s, Config* p) { + // we calloc instead of malloc to keep valgrind happy + int kv_dim = (p->dim * p->n_kv_heads) / p->n_heads; + s->x = calloc(p->dim, sizeof(float)); + s->xb = calloc(p->dim, sizeof(float)); + s->xb2 = calloc(p->dim, sizeof(float)); + s->hb = calloc(p->hidden_dim, sizeof(float)); + s->hb2 = calloc(p->hidden_dim, sizeof(float)); + s->q = calloc(p->dim, sizeof(float)); + s->k = calloc(kv_dim, sizeof(float)); + s->v = calloc(kv_dim, sizeof(float)); + s->att = calloc(p->n_heads * p->seq_len, sizeof(float)); + s->logits = calloc(p->vocab_size, sizeof(float)); + s->key_cache = calloc(p->n_layers * p->seq_len * kv_dim, sizeof(float)); + s->value_cache = calloc(p->n_layers * p->seq_len * kv_dim, sizeof(float)); + // ensure all mallocs went fine + if (!s->x || !s->xb || !s->xb2 || !s->hb || !s->hb2 || !s->q + || !s->k || !s->v || !s->att || !s->logits || !s->key_cache + || !s->value_cache) { + // ICPP: The calling function will trap the canister with a message + // printf("malloc failed!\n"); + // exit(1); + return false; + } + return true; // ICPP: all is ok +} + +// icpp: Make it robust against not freeing twice +void free_run_state(RunState* s) { + if(s->x) { free(s->x); s->x = NULL; } + if(s->xb) { free(s->xb); s->xb = NULL; } + if(s->xb2) { free(s->xb2); s->xb2 = NULL; } + if(s->hb) { free(s->hb); s->hb = NULL; } + if(s->hb2) { free(s->hb2); s->hb2 = NULL; } + if(s->q) { free(s->q); s->q = NULL; } + if(s->k) { free(s->k); s->k = NULL; } + if(s->v) { free(s->v); s->v = NULL; } + if(s->att) { free(s->att); s->att = NULL; } + if(s->logits) { free(s->logits); s->logits = NULL; } + if(s->key_cache) { free(s->key_cache); s->key_cache = NULL; } + if(s->value_cache) { free(s->value_cache); s->value_cache = NULL; } +} + +void memory_map_weights(TransformerWeights *w, Config* p, float* ptr, int shared_weights) { + int head_size = p->dim / p->n_heads; + // make sure the multiplications below are done in 64bit to fit the parameter counts of 13B+ models + unsigned long long n_layers = p->n_layers; + w->token_embedding_table = ptr; + ptr += p->vocab_size * p->dim; + w->rms_att_weight = ptr; + ptr += n_layers * p->dim; + w->wq = ptr; + ptr += n_layers * p->dim * (p->n_heads * head_size); + w->wk = ptr; + ptr += n_layers * p->dim * (p->n_kv_heads * head_size); + w->wv = ptr; + ptr += n_layers * p->dim * (p->n_kv_heads * head_size); + w->wo = ptr; + ptr += n_layers * (p->n_heads * head_size) * p->dim; + w->rms_ffn_weight = ptr; + ptr += n_layers * p->dim; + w->w1 = ptr; + ptr += n_layers * p->dim * p->hidden_dim; + w->w2 = ptr; + ptr += n_layers * p->hidden_dim * p->dim; + w->w3 = ptr; + ptr += n_layers * p->dim * p->hidden_dim; + w->rms_final_weight = ptr; + ptr += p->dim; + ptr += p->seq_len * head_size / 2; // skip what used to be freq_cis_real (for RoPE) + ptr += p->seq_len * head_size / 2; // skip what used to be freq_cis_imag (for RoPE) + w->wcls = shared_weights ? w->token_embedding_table : ptr; +} + +// See initialize.cpp +// void read_checkpoint(char* checkpoint, Config* config, TransformerWeights* weights, +// int* fd, float** data, ssize_t* file_size) { +// FILE *file = fopen(checkpoint, "rb"); +// if (!file) { fprintf(stderr, "Couldn't open file %s\n", checkpoint); exit(EXIT_FAILURE); } +// // read in the config header +// if (fread(config, sizeof(Config), 1, file) != 1) { exit(EXIT_FAILURE); } +// // negative vocab size is hacky way of signaling unshared weights. bit yikes. +// int shared_weights = config->vocab_size > 0 ? 1 : 0; +// config->vocab_size = abs(config->vocab_size); +// // figure out the file size +// fseek(file, 0, SEEK_END); // move file pointer to end of file +// *file_size = ftell(file); // get the file size, in bytes +// fclose(file); +// // memory map the Transformer weights into the data pointer +// *fd = open(checkpoint, O_RDONLY); // open in read only mode +// if (*fd == -1) { fprintf(stderr, "open failed!\n"); exit(EXIT_FAILURE); } +// *data = mmap(NULL, *file_size, PROT_READ, MAP_PRIVATE, *fd, 0); +// if (*data == MAP_FAILED) { fprintf(stderr, "mmap failed!\n"); exit(EXIT_FAILURE); } +// float* weights_ptr = *data + sizeof(Config)/sizeof(float); +// memory_map_weights(weights, config, weights_ptr, shared_weights); +// } + +// See initialize.cpp +// void build_transformer(Transformer *t, char* checkpoint_path) { +// // read in the Config and the Weights from the checkpoint +// read_checkpoint(checkpoint_path, &t->config, &t->weights, &t->fd, &t->data, &t->file_size); +// // allocate the RunState buffers +// malloc_run_state(&t->state, &t->config); +// } + +// icpp: no file, and we track runstate in p_chats +// void free_transformer(Transformer* t) { + // close the memory mapping + // if (t->data != MAP_FAILED) { munmap(t->data, t->file_size); } + // if (t->fd != -1) { close(t->fd); } + // free the RunState buffers + // free_run_state(&t->state); +// } + +// ---------------------------------------------------------------------------- +// neural net blocks; the dynamics of the Transformer + +void rmsnorm(float* o, float* x, float* weight, int size) { + // calculate sum of squares + float ss = 0.0f; + for (int j = 0; j < size; j++) { + ss += x[j] * x[j]; + } + ss /= size; + ss += 1e-5f; + ss = 1.0f / sqrtf(ss); + // normalize and scale + for (int j = 0; j < size; j++) { + o[j] = weight[j] * (ss * x[j]); + } +} + +void softmax(float* x, int size) { + // find max value (for numerical stability) + float max_val = x[0]; + for (int i = 1; i < size; i++) { + if (x[i] > max_val) { + max_val = x[i]; + } + } + // exp and sum + float sum = 0.0f; + for (int i = 0; i < size; i++) { + x[i] = expf(x[i] - max_val); + sum += x[i]; + } + // normalize + for (int i = 0; i < size; i++) { + x[i] /= sum; + } +} + +void matmul(float* xout, float* x, float* w, int n, int d) { + // W (d,n) @ x (n,) -> xout (d,) + // by far the most amount of time is spent inside this little function + int i; + #pragma omp parallel for private(i) + for (i = 0; i < d; i++) { + float val = 0.0f; + for (int j = 0; j < n; j++) { + val += w[i * n + j] * x[j]; + } + xout[i] = val; + } +} + +float* forward(Chat *chat, Transformer* transformer, int token, int pos) { + + // a few convenience variables + Config* p = &transformer->config; + TransformerWeights* w = &transformer->weights; + RunState* s = &chat->state; + float *x = s->x; + int dim = p->dim; + int kv_dim = (p->dim * p->n_kv_heads) / p->n_heads; + int kv_mul = p->n_heads / p->n_kv_heads; // integer multiplier of the kv sharing in multiquery + int hidden_dim = p->hidden_dim; + int head_size = dim / p->n_heads; + + // copy the token embedding into x + float* content_row = w->token_embedding_table + token * dim; + memcpy(x, content_row, dim*sizeof(*x)); + + // forward all the layers + for(unsigned long long l = 0; l < p->n_layers; l++) { + + // attention rmsnorm + rmsnorm(s->xb, x, w->rms_att_weight + l*dim, dim); + + // qkv matmuls for this position + matmul(s->q, s->xb, w->wq + l*dim*dim, dim, dim); + matmul(s->k, s->xb, w->wk + l*dim*kv_dim, dim, kv_dim); + matmul(s->v, s->xb, w->wv + l*dim*kv_dim, dim, kv_dim); + + // RoPE relative positional encoding: complex-valued rotate q and k in each head + for (int i = 0; i < dim; i+=2) { + int head_dim = i % head_size; + float freq = 1.0f / powf(10000.0f, head_dim / (float)head_size); + float val = pos * freq; + float fcr = cosf(val); + float fci = sinf(val); + int rotn = i < kv_dim ? 2 : 1; // how many vectors? 2 = q & k, 1 = q only + for (int v = 0; v < rotn; v++) { + float* vec = v == 0 ? s->q : s->k; // the vector to rotate (query or key) + float v0 = vec[i]; + float v1 = vec[i+1]; + vec[i] = v0 * fcr - v1 * fci; + vec[i+1] = v0 * fci + v1 * fcr; + } + } + + // save key,value at this time step (pos) to our kv cache + int loff = l * p->seq_len * kv_dim; // kv cache layer offset for convenience + float* key_cache_row = s->key_cache + loff + pos * kv_dim; + float* value_cache_row = s->value_cache + loff + pos * kv_dim; + memcpy(key_cache_row, s->k, kv_dim * sizeof(*key_cache_row)); + memcpy(value_cache_row, s->v, kv_dim * sizeof(*value_cache_row)); + + // multihead attention. iterate over all heads + int h; + #pragma omp parallel for private(h) + for (h = 0; h < p->n_heads; h++) { + // get the query vector for this head + float* q = s->q + h * head_size; + // attention scores for this head + float* att = s->att + h * p->seq_len; + // iterate over all timesteps, including the current one + for (int t = 0; t <= pos; t++) { + // get the key vector for this head and at this timestep + float* k = s->key_cache + loff + t * kv_dim + (h / kv_mul) * head_size; + // calculate the attention score as the dot product of q and k + float score = 0.0f; + for (int i = 0; i < head_size; i++) { + score += q[i] * k[i]; + } + score /= sqrtf(head_size); + // save the score to the attention buffer + att[t] = score; + } + + // softmax the scores to get attention weights, from 0..pos inclusively + softmax(att, pos + 1); + + // weighted sum of the values, store back into xb + float* xb = s->xb + h * head_size; + memset(xb, 0, head_size * sizeof(float)); + for (int t = 0; t <= pos; t++) { + // get the value vector for this head and at this timestep + float* v = s->value_cache + loff + t * kv_dim + (h / kv_mul) * head_size; + // get the attention weight for this timestep + float a = att[t]; + // accumulate the weighted value into xb + for (int i = 0; i < head_size; i++) { + xb[i] += a * v[i]; + } + } + } + + // final matmul to get the output of the attention + matmul(s->xb2, s->xb, w->wo + l*dim*dim, dim, dim); + + // residual connection back into x + for (int i = 0; i < dim; i++) { + x[i] += s->xb2[i]; + } + + // ffn rmsnorm + rmsnorm(s->xb, x, w->rms_ffn_weight + l*dim, dim); + + // Now for FFN in PyTorch we have: self.w2(F.silu(self.w1(x)) * self.w3(x)) + // first calculate self.w1(x) and self.w3(x) + matmul(s->hb, s->xb, w->w1 + l*dim*hidden_dim, dim, hidden_dim); + matmul(s->hb2, s->xb, w->w3 + l*dim*hidden_dim, dim, hidden_dim); + + // SwiGLU non-linearity + for (int i = 0; i < hidden_dim; i++) { + float val = s->hb[i]; + // silu(x)=x*σ(x), where σ(x) is the logistic sigmoid + val *= (1.0f / (1.0f + expf(-val))); + // elementwise multiply with w3(x) + val *= s->hb2[i]; + s->hb[i] = val; + } + + // final matmul to get the output of the ffn + matmul(s->xb, s->hb, w->w2 + l*dim*hidden_dim, hidden_dim, dim); + + // residual connection + for (int i = 0; i < dim; i++) { + x[i] += s->xb[i]; + } + } + + // final rmsnorm + rmsnorm(x, x, w->rms_final_weight, dim); + + // classifier into logits + matmul(s->logits, x, w->wcls, p->dim, p->vocab_size); + return s->logits; +} + +// ---------------------------------------------------------------------------- +// The Byte Pair Encoding (BPE) Tokenizer that translates strings <-> tokens + +// typedef struct { +// char *str; +// int id; +// } TokenIndex; + +// typedef struct { +// char** vocab; +// float* vocab_scores; +// TokenIndex *sorted_vocab; +// int vocab_size; +// unsigned int max_token_length; +// unsigned char byte_pieces[512]; // stores all single-byte strings +// } Tokenizer; + +int compare_tokens(const void *a, const void *b) { + return strcmp(((TokenIndex*)a)->str, ((TokenIndex*)b)->str); +} + +// ICPP: see initialize.cpp +// void build_tokenizer(Tokenizer* t, char* tokenizer_path, int vocab_size) { +// // i should have written the vocab_size into the tokenizer file... sigh +// t->vocab_size = vocab_size; +// // malloc space to hold the scores and the strings +// t->vocab = (char**)malloc(vocab_size * sizeof(char*)); +// t->vocab_scores = (float*)malloc(vocab_size * sizeof(float)); +// t->sorted_vocab = NULL; // initialized lazily +// for (int i = 0; i < 256; i++) { +// t->byte_pieces[i * 2] = (unsigned char)i; +// t->byte_pieces[i * 2 + 1] = '\0'; +// } +// // read in the file +// FILE *file = fopen(tokenizer_path, "rb"); +// if (!file) { fprintf(stderr, "couldn't load %s\n", tokenizer_path); exit(EXIT_FAILURE); } +// if (fread(&t->max_token_length, sizeof(int), 1, file) != 1) { fprintf(stderr, "failed read\n"); exit(EXIT_FAILURE); } +// int len; +// for (int i = 0; i < vocab_size; i++) { +// if (fread(t->vocab_scores + i, sizeof(float), 1, file) != 1) { fprintf(stderr, "failed read\n"); exit(EXIT_FAILURE);} +// if (fread(&len, sizeof(int), 1, file) != 1) { fprintf(stderr, "failed read\n"); exit(EXIT_FAILURE); } +// t->vocab[i] = (char *)malloc(len + 1); +// if (fread(t->vocab[i], len, 1, file) != 1) { fprintf(stderr, "failed read\n"); exit(EXIT_FAILURE); } +// t->vocab[i][len] = '\0'; // add the string terminating token +// } +// fclose(file); +// } + +void free_tokenizer(Tokenizer* t) { + for (int i = 0; i < t->vocab_size; i++) { free(t->vocab[i]); } + free(t->vocab); + free(t->vocab_scores); + free(t->sorted_vocab); +} + +char* decode(Tokenizer* t, int prev_token, int token) { + char *piece = t->vocab[token]; + // following BOS (1) token, sentencepiece decoder strips any leading whitespace (see PR #89) + if (prev_token == 1 && piece[0] == ' ') { piece++; } + // careful, some tokens designate raw bytes, and look like e.g. '<0x01>' + // parse this and convert and return the actual byte + unsigned char byte_val; + if (sscanf(piece, "<0x%02hhX>", &byte_val) == 1) { + piece = (char*)t->byte_pieces + byte_val * 2; + } + return piece; +} + +// ICPP: replaced by safe_stringify in inference.cpp +// void safe_printf(char *piece) { +// // piece might be a raw byte token, and we only want to print printable chars or whitespace +// // because some of the other bytes can be various control codes, backspace, etc. +// if (piece == NULL) { return; } +// if (piece[0] == '\0') { return; } +// if (piece[1] == '\0') { +// unsigned char byte_val = piece[0]; +// if (!(isprint(byte_val) || isspace(byte_val))) { +// return; // bad byte, don't print it +// } +// } +// printf("%s", piece); +// } + +int str_lookup(char *str, TokenIndex *sorted_vocab, int vocab_size) { + // efficiently find the perfect match for str in vocab, return its index or -1 if not found + TokenIndex tok = { .str = str }; // acts as the key to search for + TokenIndex *res = bsearch(&tok, sorted_vocab, vocab_size, sizeof(TokenIndex), compare_tokens); + return res != NULL ? res->id : -1; +} + +void encode(Tokenizer* t, const char *text, int bos, int eos, int *tokens, int *n_tokens) { + // encode the string text (input) into an upper-bound preallocated tokens[] array + // bos != 0 means prepend the BOS token (=1), eos != 0 means append the EOS token (=2) + + // start at 0 tokens + *n_tokens = 0; + + // ICPP: We made sure this does not happen when calling encode. + if (text == NULL) { + return; + // fprintf(stderr, "cannot encode NULL text\n"); exit(EXIT_FAILURE); + } + + // ICPP: we do not want to do this lazily, because during a query, it is not stored + // instead, we do this as part of initialize.cpp + // if (t->sorted_vocab == NULL) { + // // lazily malloc and sort the vocabulary + // t->sorted_vocab = malloc(t->vocab_size * sizeof(TokenIndex)); + // for (int i = 0; i < t->vocab_size; i++) { + // t->sorted_vocab[i].str = t->vocab[i]; + // t->sorted_vocab[i].id = i; + // } + // qsort(t->sorted_vocab, t->vocab_size, sizeof(TokenIndex), compare_tokens); + // } + + // create a temporary buffer that will store merge candidates of always two consecutive tokens + // *2 for concat, +1 for null terminator +2 for UTF8 (in case max_token_length is 1) + char* str_buffer = malloc((t->max_token_length*2 +1 +2) * sizeof(char)); + if (!str_buffer) + return; // ICPP: allocation failed. Just return and it will trap + size_t str_len = 0; + + // add optional BOS (=1) token, if desired + // if (bos) tokens[(*n_tokens)++] = 1; + tokens[(*n_tokens)++] = bos; // icpp: 1 or last of previous call + + // add_dummy_prefix is true by default + // so prepend a dummy prefix token to the input string, but only if text != "" + // TODO: pretty sure this isn't correct in the general case but I don't have the + // energy to read more of the sentencepiece code to figure out what it's doing + if (text[0] != '\0') { + int dummy_prefix = str_lookup(" ", t->sorted_vocab, t->vocab_size); + tokens[(*n_tokens)++] = dummy_prefix; + } + + // Okay UTF-8 time. This will get messy. Here is the reference from Wikipedia: + // Code point ↔ UTF-8 conversion + // First code point Last code point Byte 1 Byte 2 Byte 3 Byte 4 + // U+0000 U+007F 0xxxxxxx + // U+0080 U+07FF 110xxxxx 10xxxxxx + // U+0800 U+FFFF 1110xxxx 10xxxxxx 10xxxxxx + // U+10000 U+10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + + // process the raw (UTF-8) byte sequence of the input string + for (const char *c = text; *c != '\0'; c++) { + + // reset buffer if the current byte is ASCII or a leading byte + // 0xC0 is 11000000, so (*c & 0xC0) keeps the first 2 bits and zeros the rest + // 0x80 is 10000000 + // in UTF-8, all continuation bytes start with "10" in first two bits + // so in English this is: "if this byte is not a continuation byte" + if ((*c & 0xC0) != 0x80) { + // this byte must be either a leading byte (11...) or an ASCII char (0x...) + // => reset our location, as we're starting a new UTF-8 codepoint + str_len = 0; + } + + // append the current byte to the buffer + str_buffer[str_len++] = *c; // ++ is post-increment, incremented after this line + str_buffer[str_len] = '\0'; + + // while the next character is a continuation byte, continue appending + // but if there are too many of them, just stop to avoid overruning str_buffer size. + if ((*(c+1) & 0xC0) == 0x80 && str_len < 4) { + continue; + } + + // ok c+1 is not a continuation byte, so we've read in a full codepoint + int id = str_lookup(str_buffer, t->sorted_vocab, t->vocab_size); + + if (id != -1) { + // we found this codepoint in vocab, add it as a token + tokens[(*n_tokens)++] = id; + } else { + // byte_fallback encoding: just encode each byte as a token + // +3 is here because the first 3 vocab elements are , , + // so the individual bytes only start at index 3 + for (int i=0; i < str_len; i++) { + tokens[(*n_tokens)++] = (unsigned char)str_buffer[i] + 3; + } + } + str_len = 0; // protect against a sequence of stray UTF8 continuation bytes + } + + // merge the best consecutive pair each iteration, according the scores in vocab_scores + while (1) { + float best_score = -1e10; + int best_id = -1; + int best_idx = -1; + + for (int i=0; i < (*n_tokens-1); i++) { + // check if we can merge the pair (tokens[i], tokens[i+1]) + sprintf(str_buffer, "%s%s", t->vocab[tokens[i]], t->vocab[tokens[i+1]]); + int id = str_lookup(str_buffer, t->sorted_vocab, t->vocab_size); + if (id != -1 && t->vocab_scores[id] > best_score) { + // this merge pair exists in vocab! record its score and position + best_score = t->vocab_scores[id]; + best_id = id; + best_idx = i; + } + } + + if (best_idx == -1) { + break; // we couldn't find any more pairs to merge, so we're done + } + + // merge the consecutive pair (best_idx, best_idx+1) into new token best_id + tokens[best_idx] = best_id; + // delete token at position best_idx+1, shift the entire sequence back 1 + for (int i = best_idx+1; i < (*n_tokens-1); i++) { + tokens[i] = tokens[i+1]; + } + (*n_tokens)--; // token length decreased + } + + // add optional EOS (=2) token, if desired + if (eos) tokens[(*n_tokens)++] = 2; + + free(str_buffer); +} + +// ---------------------------------------------------------------------------- +// The Sampler, which takes logits and returns a sampled token +// sampling can be done in a few ways: greedy argmax, sampling, top-p sampling +// +// typedef struct { +// float prob; +// int index; +// } ProbIndex; // struct used when sorting probabilities during top-p sampling + +// typedef struct { +// int vocab_size; +// ProbIndex* probindex; // buffer used in top-p sampling +// float temperature; +// float topp; +// unsigned long long rng_state; +// } Sampler; + +int sample_argmax(float* probabilities, int n) { + // return the index that has the highest probability + int max_i = 0; + float max_p = probabilities[0]; + for (int i = 1; i < n; i++) { + if (probabilities[i] > max_p) { + max_i = i; + max_p = probabilities[i]; + } + } + return max_i; +} + +int sample_mult(float* probabilities, int n, float coin) { + // sample index from probabilities (they must sum to 1!) + // coin is a random number in [0, 1), usually from random_f32() + float cdf = 0.0f; + for (int i = 0; i < n; i++) { + cdf += probabilities[i]; + if (coin < cdf) { + return i; + } + } + return n - 1; // in case of rounding errors +} + +int compare(const void* a, const void* b) { + ProbIndex* a_ = (ProbIndex*) a; + ProbIndex* b_ = (ProbIndex*) b; + if (a_->prob > b_->prob) return -1; + if (a_->prob < b_->prob) return 1; + return 0; +} + +int sample_topp(float* probabilities, int n, float topp, ProbIndex* probindex, float coin) { + // top-p sampling (or "nucleus sampling") samples from the smallest set of + // tokens that exceed probability topp. This way we never sample tokens that + // have very low probabilities and are less likely to go "off the rails". + // coin is a random number in [0, 1), usually from random_f32() + + int n0 = 0; + // quicksort indices in descending order of probabilities + // values smaller than (1 - topp) / (n - 1) cannot be part of the result + // so for efficiency we crop these out as candidates before sorting + const float cutoff = (1.0f - topp) / (n - 1); + for (int i = 0; i < n; i++) { + if (probabilities[i] >= cutoff) { + probindex[n0].index = i; + probindex[n0].prob = probabilities[i]; + n0++; + } + } + qsort(probindex, n0, sizeof(ProbIndex), compare); + + // truncate the list where cumulative probability exceeds topp + float cumulative_prob = 0.0f; + int last_idx = n0 - 1; // in case of rounding errors consider all elements + for (int i = 0; i < n0; i++) { + cumulative_prob += probindex[i].prob; + if (cumulative_prob > topp) { + last_idx = i; + break; // we've exceeded topp by including last_idx + } + } + + // sample from the truncated list + float r = coin * cumulative_prob; + float cdf = 0.0f; + for (int i = 0; i <= last_idx; i++) { + cdf += probindex[i].prob; + if (r < cdf) { + return probindex[i].index; + } + } + return probindex[last_idx].index; // in case of rounding errors +} + +void build_sampler(Sampler* sampler, int vocab_size, float temperature, float topp, unsigned long long rng_seed) { + sampler->vocab_size = vocab_size; + sampler->temperature = temperature; + sampler->topp = topp; + sampler->rng_state = rng_seed; + // buffer only used with nucleus sampling; may not need but it's ~small + sampler->probindex = malloc(sampler->vocab_size * sizeof(ProbIndex)); +} + +void free_sampler(Sampler* sampler) { + free(sampler->probindex); +} + +unsigned int random_u32(unsigned long long *state) { + // xorshift rng: https://en.wikipedia.org/wiki/Xorshift#xorshift.2A + *state ^= *state >> 12; + *state ^= *state << 25; + *state ^= *state >> 27; + return (*state * 0x2545F4914F6CDD1Dull) >> 32; +} +float random_f32(unsigned long long *state) { // random float32 in [0,1) + return (random_u32(state) >> 8) / 16777216.0f; +} + +int sample(Sampler* sampler, float* logits) { + // sample the token given the logits and some hyperparameters + int next; + if (sampler->temperature == 0.0f) { + // greedy argmax sampling: take the token with the highest probability + next = sample_argmax(logits, sampler->vocab_size); + } else { + // apply the temperature to the logits + for (int q=0; qvocab_size; q++) { logits[q] /= sampler->temperature; } + // apply softmax to the logits to get the probabilities for next token + softmax(logits, sampler->vocab_size); + // flip a (float) coin (this is our source of entropy for sampling) + float coin = random_f32(&sampler->rng_state); + // we sample from this distribution to get the next token + if (sampler->topp <= 0 || sampler->topp >= 1) { + // simply sample from the predicted probability distribution + next = sample_mult(logits, sampler->vocab_size, coin); + } else { + // top-p (nucleus) sampling, clamping the least likely tokens to zero + next = sample_topp(logits, sampler->vocab_size, sampler->topp, sampler->probindex, coin); + } + } + return next; +} + +// ---------------------------------------------------------------------------- +// utilities: time + +// long time_in_ms() { +// // return time in milliseconds, for benchmarking the model speed +// struct timespec time; +// clock_gettime(CLOCK_REALTIME, &time); +// return time.tv_sec * 1000 + time.tv_nsec / 1000000; +// } + +// ---------------------------------------------------------------------------- +// generation loop +// ICPP: See inference.cpp +// void generate(Transformer *transformer, Tokenizer *tokenizer, Sampler *sampler, char *prompt, int steps) { +// char *empty_prompt = ""; +// if (prompt == NULL) { prompt = empty_prompt; } + +// // encode the (string) prompt into tokens sequence +// int num_prompt_tokens = 0; +// int* prompt_tokens = (int*)malloc((strlen(prompt)+3) * sizeof(int)); // +3 for '\0', ?BOS, ?EOS +// encode(tokenizer, prompt, 1, 0, prompt_tokens, &num_prompt_tokens); +// if (num_prompt_tokens < 1) { +// fprintf(stderr, "something is wrong, expected at least 1 prompt token\n"); +// exit(EXIT_FAILURE); +// } + +// // start the main loop +// long start = 0; // used to time our code, only initialized after first iteration +// int next; // will store the next token in the sequence +// int token = prompt_tokens[0]; // kick off with the first token in the prompt +// int pos = 0; // position in the sequence +// while (pos < steps) { + +// // forward the transformer to get logits for the next token +// float* logits = forward(transformer, token, pos); + +// // advance the state state machine +// if (pos < num_prompt_tokens - 1) { +// // if we are still processing the input prompt, force the next prompt token +// next = prompt_tokens[pos + 1]; +// } else { +// // otherwise sample the next token from the logits +// next = sample(sampler, logits); +// } +// pos++; + +// // data-dependent terminating condition: the BOS (=1) token delimits sequences +// if (next == 1) { break; } + +// // print the token as string, decode it with the Tokenizer object +// char* piece = decode(tokenizer, token, next); +// safe_printf(piece); // same as printf("%s", piece), but skips "unsafe" bytes +// fflush(stdout); +// token = next; + +// // init the timer here because the first iteration can be slower +// // if (start == 0) { start = time_in_ms(); } +// } +// printf("\n"); + +// // report achieved tok/s (pos-1 because the timer starts after first iteration) +// // if (pos > 1) { +// // long end = time_in_ms(); +// // fprintf(stderr, "achieved tok/s: %f\n", (pos-1) / (double)(end-start)*1000); +// // } + +// free(prompt_tokens); +// } + +// void read_stdin(const char* guide, char* buffer, size_t bufsize) { +// // read a line from stdin, up to but not including \n +// printf("%s", guide); +// if (fgets(buffer, bufsize, stdin) != NULL) { +// size_t len = strlen(buffer); +// if (len > 0 && buffer[len - 1] == '\n') { +// buffer[len - 1] = '\0'; // strip newline +// } +// } +// } + +// ---------------------------------------------------------------------------- +// chat loop +// I manually inspected the tokens for a few chat conversations compared to +// python reference and that seemed ok, but this was not thoroughly tested and +// is not safely implemented, it's more a proof of concept atm. +// +// void chat(Transformer *transformer, Tokenizer *tokenizer, Sampler *sampler, +// char *cli_user_prompt, char *cli_system_prompt, int steps) { + +// // buffers for reading the system prompt and user prompt from stdin +// // you'll notice they are soomewhat haphazardly and unsafely set atm +// char system_prompt[512]; +// char user_prompt[512]; +// char rendered_prompt[1152]; +// int num_prompt_tokens = 0; +// int* prompt_tokens = (int*)malloc(1152 * sizeof(int)); +// int user_idx; + +// // start the main loop +// int8_t user_turn = 1; // user starts +// int next; // will store the next token in the sequence +// int token; // stores the current token to feed into the transformer +// int prev_token; +// int pos = 0; // position in the sequence +// while (pos < steps) { + +// // when it is the user's turn to contribute tokens to the dialog... +// if (user_turn) { +// // get the (optional) system prompt at position 0 +// if (pos == 0) { +// // at position 0, the user can also contribute a system prompt +// if (cli_system_prompt == NULL) { +// // system prompt was not passed in, attempt to get it from stdin +// read_stdin("Enter system prompt (optional): ", system_prompt, sizeof(system_prompt)); +// } else { +// // system prompt was passed in, use it +// strcpy(system_prompt, cli_system_prompt); +// } +// } +// // get the user prompt +// if (pos == 0 && cli_user_prompt != NULL) { +// // user prompt for position 0 was passed in, use it +// strcpy(user_prompt, cli_user_prompt); +// } else { +// // otherwise get user prompt from stdin +// read_stdin("User: ", user_prompt, sizeof(user_prompt)); +// } +// // render user/system prompts into the Llama 2 Chat schema +// if (pos == 0 && system_prompt[0] != '\0') { +// char system_template[] = "[INST] <>\n%s\n<>\n\n%s [/INST]"; +// sprintf(rendered_prompt, system_template, system_prompt, user_prompt); +// } else { +// char user_template[] = "[INST] %s [/INST]"; +// sprintf(rendered_prompt, user_template, user_prompt); +// } +// // encode the rendered prompt into tokens +// encode(tokenizer, rendered_prompt, 1, 0, prompt_tokens, &num_prompt_tokens); +// user_idx = 0; // reset the user index +// user_turn = 0; +// printf("Assistant: "); +// } + +// // determine the token to pass into the transformer next +// if (user_idx < num_prompt_tokens) { +// // if we are still processing the input prompt, force the next prompt token +// token = prompt_tokens[user_idx++]; +// } else { +// // otherwise use the next token sampled from previous turn +// token = next; +// } +// // EOS (=2) token ends the Assistant turn +// if (token == 2) { user_turn = 1; } + +// // forward the transformer to get logits for the next token +// float* logits = forward(transformer, token, pos); +// next = sample(sampler, logits); +// pos++; + +// if (user_idx >= num_prompt_tokens && next != 2) { +// // the Assistant is responding, so print its output +// char* piece = decode(tokenizer, token, next); +// safe_printf(piece); // same as printf("%s", piece), but skips "unsafe" bytes +// fflush(stdout); +// } +// if (next == 2) { printf("\n"); } +// } +// printf("\n"); +// free(prompt_tokens); +// } + + +// ---------------------------------------------------------------------------- +// CLI, include only if not testing +// #ifndef TESTING + +// void error_usage() { +// fprintf(stderr, "Usage: run [options]\n"); +// fprintf(stderr, "Example: run model.bin -n 256 -i \"Once upon a time\"\n"); +// fprintf(stderr, "Options:\n"); +// fprintf(stderr, " -t temperature in [0,inf], default 1.0\n"); +// fprintf(stderr, " -p p value in top-p (nucleus) sampling in [0,1] default 0.9\n"); +// fprintf(stderr, " -s random seed, default time(NULL)\n"); +// fprintf(stderr, " -n number of steps to run for, default 256. 0 = max_seq_len\n"); +// fprintf(stderr, " -i input prompt\n"); +// fprintf(stderr, " -z optional path to custom tokenizer\n"); +// fprintf(stderr, " -m mode: generate|chat, default: generate\n"); +// fprintf(stderr, " -y (optional) system prompt in chat mode\n"); +// exit(EXIT_FAILURE); +// } + +// int main(int argc, char *argv[]) { + +// // default parameters +// char *checkpoint_path = NULL; // e.g. out/model.bin +// char *tokenizer_path = "tokenizer.bin"; +// float temperature = 1.0f; // 0.0 = greedy deterministic. 1.0 = original. don't set higher +// float topp = 0.9f; // top-p in nucleus sampling. 1.0 = off. 0.9 works well, but slower +// int steps = 256; // number of steps to run for +// char *prompt = NULL; // prompt string +// unsigned long long rng_seed = 0; // seed rng with time by default +// char *mode = "generate"; // generate|chat +// char *system_prompt = NULL; // the (optional) system prompt to use in chat mode + +// // poor man's C argparse so we can override the defaults above from the command line +// if (argc >= 2) { checkpoint_path = argv[1]; } else { error_usage(); } +// for (int i = 2; i < argc; i+=2) { +// // do some basic validation +// if (i + 1 >= argc) { error_usage(); } // must have arg after flag +// if (argv[i][0] != '-') { error_usage(); } // must start with dash +// if (strlen(argv[i]) != 2) { error_usage(); } // must be -x (one dash, one letter) +// // read in the args +// if (argv[i][1] == 't') { temperature = atof(argv[i + 1]); } +// else if (argv[i][1] == 'p') { topp = atof(argv[i + 1]); } +// else if (argv[i][1] == 's') { rng_seed = atoi(argv[i + 1]); } +// else if (argv[i][1] == 'n') { steps = atoi(argv[i + 1]); } +// else if (argv[i][1] == 'i') { prompt = argv[i + 1]; } +// else if (argv[i][1] == 'z') { tokenizer_path = argv[i + 1]; } +// else if (argv[i][1] == 'm') { mode = argv[i + 1]; } +// else if (argv[i][1] == 'y') { system_prompt = argv[i + 1]; } +// else { error_usage(); } +// } + +// // parameter validation/overrides +// if (rng_seed <= 0) rng_seed = (unsigned int)time(NULL); +// if (temperature < 0.0) temperature = 0.0; +// if (topp < 0.0 || 1.0 < topp) topp = 0.9; +// if (steps < 0) steps = 0; + +// // build the Transformer via the model .bin file +// Transformer transformer; +// build_transformer(&transformer, checkpoint_path); +// if (steps == 0 || steps > transformer.config.seq_len) steps = transformer.config.seq_len; // ovrerride to ~max length + +// // build the Tokenizer via the tokenizer .bin file +// Tokenizer tokenizer; +// build_tokenizer(&tokenizer, tokenizer_path, transformer.config.vocab_size); + +// // build the Sampler +// Sampler sampler; +// build_sampler(&sampler, transformer.config.vocab_size, temperature, topp, rng_seed); + +// // run! +// if (strcmp(mode, "generate") == 0) { +// generate(&transformer, &tokenizer, &sampler, prompt, steps); +// } else if (strcmp(mode, "chat") == 0) { +// chat(&transformer, &tokenizer, &sampler, prompt, system_prompt, steps); +// } else { +// fprintf(stderr, "unknown mode: %s\n", mode); +// error_usage(); +// } + +// // memory and file handles cleanup +// free_sampler(&sampler); +// free_tokenizer(&tokenizer); +// free_transformer(&transformer); +// return 0; +// } +// #endif diff --git a/icpp_llama2/src/run.h b/icpp_llama2/src/run.h new file mode 100644 index 0000000..afa9b88 --- /dev/null +++ b/icpp_llama2/src/run.h @@ -0,0 +1,141 @@ +#pragma once + +// Enable calling from C++ +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +// ---------------------------------------------------------------------------- +// Transformer and RunState structs, and related memory management + +typedef struct { + int dim; // transformer dimension + int hidden_dim; // for ffn layers + int n_layers; // number of layers + int n_heads; // number of query heads + int n_kv_heads; // number of key/value heads (can be < query heads because of multiquery) + int vocab_size; // vocabulary size, usually 256 (byte-level) + int seq_len; // max sequence length +} Config; + +typedef struct { + // token embedding table + float *token_embedding_table; // (vocab_size, dim) + // weights for rmsnorms + float *rms_att_weight; // (layer, dim) rmsnorm weights + float *rms_ffn_weight; // (layer, dim) + // weights for matmuls. note dim == n_heads * head_size + float *wq; // (layer, dim, n_heads * head_size) + float *wk; // (layer, dim, n_kv_heads * head_size) + float *wv; // (layer, dim, n_kv_heads * head_size) + float *wo; // (layer, n_heads * head_size, dim) + // weights for ffn + float *w1; // (layer, hidden_dim, dim) + float *w2; // (layer, dim, hidden_dim) + float *w3; // (layer, hidden_dim, dim) + // final rmsnorm + float *rms_final_weight; // (dim,) + // (optional) classifier weights for the logits, on the last layer + float *wcls; +} TransformerWeights; + +typedef struct { + // current wave of activations + float *x; // activation at current time stamp (dim,) + float *xb; // same, but inside a residual branch (dim,) + float *xb2; // an additional buffer just for convenience (dim,) + float *hb; // buffer for hidden dimension in the ffn (hidden_dim,) + float *hb2; // buffer for hidden dimension in the ffn (hidden_dim,) + float *q; // query (dim,) + float *k; // key (dim,) + float *v; // value (dim,) + float *att; // buffer for scores/attention values (n_heads, seq_len) + float *logits; // output logits + // kv cache + float *key_cache; // (layer, seq_len, dim) + float *value_cache; // (layer, seq_len, dim) +} RunState; + +typedef struct { + Config config; // the hyperparameters of the architecture (the blueprint) + TransformerWeights weights; // the weights of the model + // icpp: we are storing RunState per user, not per model + // RunState state; // buffers for the "wave" of activations in the forward pass + // some more state needed to properly clean up the memory mapping (sigh) + // icpp: we do not use these, because we do not read from file + // int fd; // file descriptor for memory mapping + // float *data; // memory mapped data pointer + // ssize_t file_size; // size of the checkpoint file in bytes +} Transformer; + +typedef struct { + RunState state; // buffers for the "wave" of activations in the forward pass + // icpp: to support generation across endpoint calls, we need to save the next token predicted + int pos; // position in the sequence + int next; // next token that was predicted + int8_t bos; // add begin-of-sentence token or not + int8_t eos; // add end-of-sentence token or not + unsigned long long + total_steps; // total steps to generate, including previous calls +} Chat; + +typedef struct { + char *str; + int id; +} TokenIndex; + +typedef struct { + char **vocab; + float *vocab_scores; + TokenIndex *sorted_vocab; + int vocab_size; + unsigned int max_token_length; + unsigned char byte_pieces[512]; // stores all single-byte strings +} Tokenizer; + +typedef struct { + float prob; + int index; +} ProbIndex; // struct used when sorting probabilities during top-p sampling + +typedef struct { + int vocab_size; + ProbIndex *probindex; // buffer used in top-p sampling + float temperature; + float topp; + unsigned long long rng_state; +} Sampler; + +extern Config config; +extern Transformer transformer; +extern Tokenizer tokenizer; +extern Sampler sampler; + +// At inference +extern unsigned long long rng_seed; + +int compare_tokens(const void *a, const void *b); +bool malloc_run_state(RunState *s, Config *p); +void memory_map_weights(TransformerWeights *w, Config *p, float *ptr, + int shared_weights); +void encode(Tokenizer *t, const char *text, int bos, int eos, int *tokens, + int *n_tokens); +float *forward(Chat *chat, Transformer *transformer, int token, int pos); +char *decode(Tokenizer *t, int prev_token, int token); +void build_sampler(Sampler *sampler, int vocab_size, float temperature, + float topp, unsigned long long rng_seed); +int sample(Sampler *sampler, float *logits); +int sample_topp(float *probabilities, int n, float topp, ProbIndex *probindex, + float coin); + +void free_run_state(RunState *s); +void free_sampler(Sampler *sampler); +void free_tokenizer(Tokenizer *t); +// void free_transformer(Transformer *t); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/icpp_llama2/src/upload.cpp b/icpp_llama2/src/upload.cpp new file mode 100644 index 0000000..0a4884c --- /dev/null +++ b/icpp_llama2/src/upload.cpp @@ -0,0 +1,159 @@ +// Endpoints for uploading the trained model & the tokenizer files +// eg. models/stories15M.bin & tokenizers/tokenizer.bin + +#include "upload.h" + +#include + +#include "canister.h" +#include "http.h" +#include "ic_api.h" + +ModelBytes *p_model_bytes{nullptr}; +TokenizerBytes *p_tokenizer_bytes{nullptr}; + +// 0 - none +// 1 - minimal +// 2 - a lot +int DEBUG_VERBOSE = 1; + +void new_model_bytes_memory() { + if (p_model_bytes == nullptr) { + IC_API::debug_print(std::string(__func__) + + ": Creating ModelBytes Instance."); + p_model_bytes = new (std::nothrow) ModelBytes(); + if (p_model_bytes == nullptr) { + IC_API::trap("Allocation of p_model_bytes failed"); + } + } +} + +void delete_model_bytes_memory() { + if (p_model_bytes) { + delete p_model_bytes; + p_model_bytes = nullptr; + } +} + +void new_tokenizer_bytes_memory() { + if (p_tokenizer_bytes == nullptr) { + IC_API::debug_print(std::string(__func__) + + ": Creating TokenizerBytes Instance."); + p_tokenizer_bytes = new (std::nothrow) TokenizerBytes(); + if (p_tokenizer_bytes == nullptr) { + IC_API::trap("Allocation of p_tokenizer_bytes failed"); + } + } +} + +void delete_tokenizer_bytes_memory() { + if (p_tokenizer_bytes) { + delete p_tokenizer_bytes; + p_tokenizer_bytes = nullptr; + } +} + +void print_upload_model_bytes_summary(std::string calling_function, + const std::vector &v) { + std::string msg; + if (DEBUG_VERBOSE == 0) { + return; + } else if (DEBUG_VERBOSE == 1) { + msg += "chunk size = " + std::to_string(v.size()) + + "; total size = " + std::to_string(p_model_bytes->vec.size()); + } else { + msg += calling_function + ":"; + msg += "\n- received v of size " + std::to_string(v.size()); + msg += "\n- v[0] = " + std::to_string(v[0]); + msg += "\n- v.back() = " + std::to_string(v.back()); + msg += "\n- p_model_bytes->vec now has size " + + std::to_string(p_model_bytes->vec.size()); + msg += "\n- p_model_bytes->vec[0] = " + + std::to_string(p_model_bytes->vec[0]); + msg += "\n- p_model_bytes->vec.back() = " + + std::to_string(p_model_bytes->vec.back()); + } + IC_API::debug_print(msg); +} + +void print_upload_tokenizer_bytes_summary(std::string calling_function, + const std::vector &v) { + std::string msg; + if (DEBUG_VERBOSE == 0) { + return; + } else if (DEBUG_VERBOSE == 1) { + msg += "chunk size = " + std::to_string(v.size()) + + "; total size = " + std::to_string(p_model_bytes->vec.size()); + } else { + msg += calling_function + ":"; + msg += "\n- received v of size " + std::to_string(v.size()); + msg += "\n- v[0] = " + std::to_string(v[0]); + msg += "\n- v.back() = " + std::to_string(v.back()); + msg += "\n- p_tokenizer_bytes->vec now has size " + + std::to_string(p_tokenizer_bytes->vec.size()); + msg += "\n- p_tokenizer_bytes->vec[0] = " + + std::to_string(p_tokenizer_bytes->vec[0]); + msg += "\n- p_tokenizer_bytes->vec.back() = " + + std::to_string(p_tokenizer_bytes->vec.back()); + } + IC_API::debug_print(msg); +} + +void reset_model() { + IC_API ic_api(CanisterUpdate{std::string(__func__)}, false); + if (!is_owner(ic_api)) return; + + ready_for_inference = false; + + delete_model_bytes_memory(); + + ic_api.to_wire( + CandidTypeVariant{"ok", CandidTypeNat16{Http::StatusCode::OK}}); +} + +void reset_tokenizer() { + IC_API ic_api(CanisterUpdate{std::string(__func__)}, false); + if (!is_owner(ic_api)) return; + + ready_for_inference = false; + + delete_tokenizer_bytes_memory(); + + ic_api.to_wire( + CandidTypeVariant{"ok", CandidTypeNat16{Http::StatusCode::OK}}); +} + +// Endpoint for uploading the stories15M.bin file as bytes +void upload_model_bytes_chunk() { + IC_API ic_api(CanisterUpdate{std::string(__func__)}, false); + if (!is_owner(ic_api)) return; + + std::vector v; + ic_api.from_wire(CandidTypeVecNat8{&v}); + + if (p_model_bytes == nullptr) new_model_bytes_memory(); + p_model_bytes->vec.insert(p_model_bytes->vec.end(), v.begin(), v.end()); + + print_upload_model_bytes_summary(std::string(__func__), v); + + ic_api.to_wire( + CandidTypeVariant{"ok", CandidTypeNat16{Http::StatusCode::OK}}); +} + +// Endpoint for uploading the tokenizer.bin file as bytes +void upload_tokenizer_bytes_chunk() { + IC_API ic_api(CanisterUpdate{std::string(__func__)}, false); + if (!is_owner(ic_api)) return; + + std::vector v; + ic_api.from_wire(CandidTypeVecNat8{&v}); + + if (p_tokenizer_bytes == nullptr) new_tokenizer_bytes_memory(); + p_tokenizer_bytes->vec.insert(p_tokenizer_bytes->vec.end(), v.begin(), + v.end()); + + print_upload_tokenizer_bytes_summary(std::string(__func__), v); + + ic_api.to_wire( + CandidTypeVariant{"ok", CandidTypeNat16{Http::StatusCode::OK}}); +} \ No newline at end of file diff --git a/icpp_llama2/src/upload.h b/icpp_llama2/src/upload.h new file mode 100644 index 0000000..1772b0d --- /dev/null +++ b/icpp_llama2/src/upload.h @@ -0,0 +1,27 @@ +#pragma once + +#include "wasm_symbol.h" +#include +#include + +// The uploaded bytes of the trained model (eg. models/stories15M.bin) +class ModelBytes { +public: + std::vector vec; +}; +extern ModelBytes *p_model_bytes; + +// The uploaded bytes of the tokenizer (eg. tokenizers/tokenizer.bin) +class TokenizerBytes { +public: + std::vector vec; +}; +extern TokenizerBytes *p_tokenizer_bytes; + +void reset_model() WASM_SYMBOL_EXPORTED("canister_update reset_model"); +void reset_tokenizer() WASM_SYMBOL_EXPORTED("canister_update reset_tokenizer"); + +void upload_model_bytes_chunk() + WASM_SYMBOL_EXPORTED("canister_update upload_model_bytes_chunk"); +void upload_tokenizer_bytes_chunk() + WASM_SYMBOL_EXPORTED("canister_update upload_tokenizer_bytes_chunk"); \ No newline at end of file diff --git a/icpp_llama2/src/users.cpp b/icpp_llama2/src/users.cpp new file mode 100644 index 0000000..270ef3d --- /dev/null +++ b/icpp_llama2/src/users.cpp @@ -0,0 +1,64 @@ +// Endpoints for user metadata get & set + +#include "users.h" + +#include + +#include "canister.h" +#include "chats.h" +#include "http.h" +#include "ic_api.h" + +#include "run.h" + +void get_user_count() { + IC_API ic_api(CanisterQuery{std::string(__func__)}, false); + if (!is_owner(ic_api, false)) IC_API::trap("Access Denied"); + + uint64_t user_count = 0; + if (p_metadata_users) { + user_count = p_metadata_users->umap.size(); + } + + ic_api.to_wire(CandidTypeNat64{user_count}); +} + +void get_user_ids() { + IC_API ic_api(CanisterQuery{std::string(__func__)}, false); + if (!is_owner(ic_api, false)) IC_API::trap("Access Denied"); + + std::vector user_ids; + + if (p_metadata_users) { + for (const auto &pair : p_metadata_users->umap) { + user_ids.push_back(pair.first); + } + } + + ic_api.to_wire(CandidTypeVecText{user_ids}); +} + +void get_user_metadata() { + IC_API ic_api(CanisterQuery{std::string(__func__)}, false); + if (!is_owner(ic_api, false)) IC_API::trap("Access Denied"); + + std::string in_principal; + ic_api.from_wire(CandidTypeText{&in_principal}); + + std::vector chats_start_time; + std::vector chats_total_steps; + + auto it = p_metadata_users->umap.find(in_principal); + if (it != p_metadata_users->umap.end()) { + // Found the user metadata for the given in_principal + for (const MetadataChat &chat : it->second.metadata_chats) { + chats_start_time.push_back(chat.start_time); + chats_total_steps.push_back(chat.total_steps); + } + } + + CandidArgs args_out; + args_out.append(CandidTypeVecNat64{chats_start_time}); + args_out.append(CandidTypeVecNat64{chats_total_steps}); + ic_api.to_wire(args_out); +} \ No newline at end of file diff --git a/icpp_llama2/src/users.h b/icpp_llama2/src/users.h new file mode 100644 index 0000000..fbf18c8 --- /dev/null +++ b/icpp_llama2/src/users.h @@ -0,0 +1,9 @@ +#pragma once + +#include "wasm_symbol.h" +#include + +void get_user_count() WASM_SYMBOL_EXPORTED("canister_query get_user_count"); +void get_user_ids() WASM_SYMBOL_EXPORTED("canister_query get_user_ids"); +void get_user_metadata() + WASM_SYMBOL_EXPORTED("canister_query get_user_metadata"); \ No newline at end of file diff --git a/icpp_llama2/test/__init__.py b/icpp_llama2/test/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/icpp_llama2/test/conftest.py b/icpp_llama2/test/conftest.py new file mode 100644 index 0000000..83010bd --- /dev/null +++ b/icpp_llama2/test/conftest.py @@ -0,0 +1,8 @@ +"""The pytest fixtures + https://docs.pytest.org/en/latest/fixture.html +""" +# pylint: disable=missing-function-docstring, unused-import, wildcard-import, unused-wildcard-import +import pytest +from icpp.conftest_base import * # pytest fixtures provided by icpp + +# Define your pytest fixtures below diff --git a/icpp_llama2/test/test_apis.py b/icpp_llama2/test/test_apis.py new file mode 100644 index 0000000..6a59e26 --- /dev/null +++ b/icpp_llama2/test/test_apis.py @@ -0,0 +1,213 @@ +"""Test canister APIs + + First deploy the canister, then run: + + $ pytest --network=[local/ic] test_apis.py + +""" +# pylint: disable=unused-argument, missing-function-docstring, unused-import, wildcard-import, unused-wildcard-import, line-too-long + +from pathlib import Path +import pytest +from icpp.smoketest import call_canister_api + +# Path to the dfx.json file +DFX_JSON_PATH = Path(__file__).parent / "../dfx.json" + +# Canister in the dfx.json file we want to test +CANISTER_NAME = "llama2" + + +def test__health(identity_anonymous: dict[str, str], network: str) -> None: + response = call_canister_api( + dfx_json_path=DFX_JSON_PATH, + canister_name=CANISTER_NAME, + canister_method="health", + canister_argument="()", + network=network, + timeout_seconds=10, + ) + expected_response = "(true)" + assert response == expected_response + + +def test__ready(identity_anonymous: dict[str, str], network: str) -> None: + response = call_canister_api( + dfx_json_path=DFX_JSON_PATH, + canister_name=CANISTER_NAME, + canister_method="ready", + canister_argument="()", + network=network, + timeout_seconds=10, + ) + expected_response = "(true)" + assert response == expected_response + + +def test__reset_model_err(identity_anonymous: dict[str, str], network: str) -> None: + response = call_canister_api( + dfx_json_path=DFX_JSON_PATH, + canister_name=CANISTER_NAME, + canister_method="reset_model", + canister_argument="()", + network=network, + timeout_seconds=10, + ) + expected_response = "(variant { err = 401 : nat16 })" + assert response == expected_response + + +def test__new_chat_anonymous(identity_anonymous: dict[str, str], network: str) -> None: + response = call_canister_api( + dfx_json_path=DFX_JSON_PATH, + canister_name=CANISTER_NAME, + canister_method="new_chat", + canister_argument="()", + network=network, + timeout_seconds=10, + ) + assert "err" in response + + +def test__new_chat(identity_default: dict[str, str], network: str) -> None: + response = call_canister_api( + dfx_json_path=DFX_JSON_PATH, + canister_name=CANISTER_NAME, + canister_method="new_chat", + canister_argument="()", + network=network, + timeout_seconds=10, + ) + assert "ok" in response + + +def test__inference_1_anonymous( + identity_anonymous: dict[str, str], network: str +) -> None: + response = call_canister_api( + dfx_json_path=DFX_JSON_PATH, + canister_name=CANISTER_NAME, + canister_method="inference", + canister_argument='(record {prompt = "" : text; steps = 19 : nat64; temperature = 0.9 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})', + network=network, + timeout_seconds=10, + ) + assert "err" in response + + +def test__inference_1(identity_default: dict[str, str], network: str) -> None: + response = call_canister_api( + dfx_json_path=DFX_JSON_PATH, + canister_name=CANISTER_NAME, + canister_method="inference", + canister_argument='(record {prompt = "" : text; steps = 19 : nat64; temperature = 0.9 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})', + network=network, + timeout_seconds=10, + ) + assert "ok" in response + + +def test__inference_2(identity_default: dict[str, str], network: str) -> None: + response = call_canister_api( + dfx_json_path=DFX_JSON_PATH, + canister_name=CANISTER_NAME, + canister_method="inference", + canister_argument='(record {prompt = "Lilly " : text; steps = 19 : nat64; temperature = 0.9 : float32; topp = 0.9 : float32; rng_seed = 0 : nat64;})', + network=network, + timeout_seconds=10, + ) + assert "ok" in response + + +# ---------------------------------------------------------------------------------- +# Users data, requires that identity_default is the owner +# So, deploy with that default identity !!! +# +def test__get_user_count(identity_default: dict[str, str], network: str) -> None: + response = call_canister_api( + dfx_json_path=DFX_JSON_PATH, + canister_name=CANISTER_NAME, + canister_method="get_user_count", + canister_argument="4449444c0000", + canister_input="raw", + canister_output="raw", + network=network, + ) + assert "4449444c0001780100000000000000" == response + + +def test__get_user_ids(identity_default: dict[str, str], network: str) -> None: + _response = call_canister_api( + dfx_json_path=DFX_JSON_PATH, + canister_name=CANISTER_NAME, + canister_method="get_user_ids", + canister_argument="4449444c0000", + canister_input="raw", + canister_output="raw", + network=network, + ) + # No assert. A test just to make sure it does not trap. + + +def test__get_user_metadata(identity_default: dict[str, str], network: str) -> None: + _response = call_canister_api( + dfx_json_path=DFX_JSON_PATH, + canister_name=CANISTER_NAME, + canister_method="get_user_metadata", + canister_argument="4449444c000171093269626f372d646961", + canister_input="raw", + canister_output="raw", + network=network, + ) + # No assert. A test just to make sure it does not trap. + + +# ---------------------------------------------------------------------------------- +# Trap testing +# +# Verify that calls trap when not owner +def test__trap_get_user_count(identity_anonymous: dict[str, str], network: str) -> None: + response = call_canister_api( + dfx_json_path=DFX_JSON_PATH, + canister_name=CANISTER_NAME, + canister_method="get_user_count", + canister_argument="4449444c0000", + canister_input="raw", + canister_output="raw", + network=network, + ) + assert "Failed call to api" in response + assert "trapped explicitly" in response + assert "Access Denied" in response + + +def test__trap_get_user_ids(identity_anonymous: dict[str, str], network: str) -> None: + response = call_canister_api( + dfx_json_path=DFX_JSON_PATH, + canister_name=CANISTER_NAME, + canister_method="get_user_ids", + canister_argument="4449444c0000", + canister_input="raw", + canister_output="raw", + network=network, + ) + assert "Failed call to api" in response + assert "trapped explicitly" in response + assert "Access Denied" in response + + +def test__trap_get_user_metadata( + identity_anonymous: dict[str, str], network: str +) -> None: + response = call_canister_api( + dfx_json_path=DFX_JSON_PATH, + canister_name=CANISTER_NAME, + canister_method="get_user_metadata", + canister_argument="4449444c000171093269626f372d646961", + canister_input="raw", + canister_output="raw", + network=network, + ) + assert "Failed call to api" in response + assert "trapped explicitly" in response + assert "Access Denied" in response diff --git a/icpp_llama2/tokenizers/__init__.py b/icpp_llama2/tokenizers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/icpp_llama2/tokenizers/tokenizer.bin b/icpp_llama2/tokenizers/tokenizer.bin new file mode 100644 index 0000000000000000000000000000000000000000..e0a8a7bc47fda2ecaab1e2cc2255d140925ed704 GIT binary patch literal 432717 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ⅅ9xq)jX7kJ+xjcPYAaHqYfwaF{f|{=#Gi+Red5 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 literal 0 HcmV?d00001 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..dbec7c5 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,6 @@ +-r icpp_llama2/requirements.txt + +# to lint python scripts +black +pylint==2.13.9 +mypy \ No newline at end of file diff --git a/test_all_llms.ps1 b/test_all_llms.ps1 new file mode 100644 index 0000000..a51aee9 --- /dev/null +++ b/test_all_llms.ps1 @@ -0,0 +1,22 @@ +####################################################################### +# This is a Windows PowerShell script, +# +# (-) equivalent to the Makefile target `test-all-llms: +# (-) In a Windows PowerShell (*): +# +# .\test_all_llms.ps1 +# +# (*) The Miniconda Powershell is highly recommended +# +####################################################################### + +wsl --% dfx identity use default + +Write-Host " " +Write-Host "--------------------------------------------------" +Write-Host "Testing icpp_llama2" +Set-Location -Path .\icpp_llama2 +.\demo.ps1 + +# Change directory back to the root +Set-Location -Path ..\.. \ No newline at end of file diff --git a/version_clang.txt b/version_clang.txt new file mode 100644 index 0000000..da2d398 --- /dev/null +++ b/version_clang.txt @@ -0,0 +1 @@ +14 \ No newline at end of file