chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
"""
|
||||
Python bindings for the ggml library.
|
||||
|
||||
Usage example:
|
||||
|
||||
from ggml import lib, ffi
|
||||
from ggml.utils import init, copy, numpy
|
||||
import numpy as np
|
||||
|
||||
ctx = init(mem_size=10*1024*1024)
|
||||
n = 1024
|
||||
n_threads = 4
|
||||
|
||||
a = lib.ggml_new_tensor_1d(ctx, lib.GGML_TYPE_Q5_K, n)
|
||||
b = lib.ggml_new_tensor_1d(ctx, lib.GGML_TYPE_F32, n)
|
||||
sum = lib.ggml_add(ctx, a, b)
|
||||
|
||||
gf = ffi.new('struct ggml_cgraph*')
|
||||
lib.ggml_build_forward_expand(gf, sum)
|
||||
|
||||
copy(np.array([i for i in range(n)], np.float32), a)
|
||||
copy(np.array([i*100 for i in range(n)], np.float32), b)
|
||||
lib.ggml_graph_compute_with_ctx(ctx, gf, n_threads)
|
||||
|
||||
print(numpy(sum, allow_copy=True))
|
||||
|
||||
See https://cffi.readthedocs.io/en/latest/cdef.html for more on cffi.
|
||||
"""
|
||||
|
||||
try:
|
||||
from ggml.cffi import ffi as ffi
|
||||
except ImportError as e:
|
||||
raise ImportError(f"Couldn't find ggml bindings ({e}). Run `python regenerate.py` or check your PYTHONPATH.")
|
||||
|
||||
import os, platform
|
||||
|
||||
__exact_library = os.environ.get("GGML_LIBRARY")
|
||||
if __exact_library:
|
||||
__candidates = [__exact_library]
|
||||
elif platform.system() == "Windows":
|
||||
__candidates = ["ggml_shared.dll", "llama.dll"]
|
||||
else:
|
||||
__candidates = ["libggml_shared.so", "libllama.so"]
|
||||
if platform.system() == "Darwin":
|
||||
__candidates += ["libggml_shared.dylib", "libllama.dylib"]
|
||||
|
||||
for i, name in enumerate(__candidates):
|
||||
try:
|
||||
# This is where all the functions, enums and constants are defined
|
||||
lib = ffi.dlopen(name)
|
||||
except OSError:
|
||||
if i < len(__candidates) - 1:
|
||||
continue
|
||||
raise OSError(f"Couldn't find ggml's shared library (tried names: {__candidates}). Add its directory to DYLD_LIBRARY_PATH (on Mac) or LD_LIBRARY_PATH, or define GGML_LIBRARY.")
|
||||
|
||||
# This contains the cffi helpers such as new, cast, string, etc.
|
||||
# https://cffi.readthedocs.io/en/latest/ref.html#ffi-interface
|
||||
ffi = ffi
|
||||
Reference in New Issue
Block a user