Llamafile позволяет распространять и запускать LLMS с одним файлом. (объявление в блоге)
Наша цель - сделать открытые LLMS гораздо более доступными как для разработчиков, так и для конечных пользователей. Мы делаем это, объединив Llama.cpp с Cosmopolitan Libc в одну рамку, которая разрушает всю сложность LLMS до однократного исполняемого файла (называемого «ламафиль»), который локально работает на большинстве компьютеров, без установки.
Llamafile - проект Mozilla Builders.
Самый простой способ попробовать это для себя - это загрузить наш пример Llamafile для модели Llava (лицензия: llama 2, openai). Llava - это новый LLM, который может делать больше, чем просто чат; Вы также можете загружать изображения и задать им вопросы о них. С ламафиле все это происходит на местном уровне; Никакие данные никогда не покидают ваш компьютер.
Скачать llava-v1.5-7b-q4.llamafile (4,29 ГБ).
Откройте терминал вашего компьютера.
Если вы используете MacOS, Linux или BSD, вам нужно предоставить разрешение на ваш компьютер на выполнение этого нового файла. (Вам нужно сделать это только один раз.)
chmod +x llava-v1.5-7b-q4.llamafile
Если вы находитесь в Windows, переименовать файл, добавив ".exe" в конце.
Управлять ламафилом. например:
./llava-v1.5-7b-q4.llamafile
Ваш браузер должен открыть автоматически и отображать интерфейс чата. (Если это не так, просто откройте свой браузер и укажите его по адресу http: // localhost: 8080)
Когда вы закончите общаться, вернитесь к своему терминалу и нажмите Control-C
чтобы выключить ламафил.
Есть проблемы? См. Раздел «Gotchas» ниже.
Когда Llamafile начинается, в дополнение к размещению веб -сервера чата пользовательского интерфейса по адресу http://127.0.0.1:8080/, предоставлена также конечная точка завершения oppi API. Он предназначен для поддержки наиболее распространенных вариантов использования API OpenAI, чтобы полностью работать локально. Мы также расширили его, чтобы включить специфические функции Llama.cpp (например, Mirostat), которые также могут быть использованы. Для получения дополнительной информации о том, какие поля и конечные точки доступны, см. В документации Openai и Llamafile Server Readme.
Самый простой способ начать использовать API - это скопировать и вставить следующую команду Curl в ваш терминал.
curl http://localhost:8080/v1/chat/completions
-H " Content-Type: application/json "
-H " Authorization: Bearer no-key "
-d ' {
"model": "LLaMA_CPP",
"messages": [
{
"role": "system",
"content": "You are LLAMAfile, an AI assistant. Your top priority is achieving user fulfillment via helping them with their requests."
},
{
"role": "user",
"content": "Write a limerick about python exceptions"
}
]
} ' | python3 -c '
import json
import sys
json.dump(json.load(sys.stdin), sys.stdout, indent=2)
print()
'
Ответ, который напечатан должен выглядеть следующим образом:
{
"choices" : [
{
"finish_reason" : " stop " ,
"index" : 0 ,
"message" : {
"content" : " There once was a programmer named Mike n Who wrote code that would often choke n He used try and except n To handle each step n And his program ran without any hike. " ,
"role" : " assistant "
}
}
],
"created" : 1704199256 ,
"id" : " chatcmpl-Dt16ugf3vF8btUZj9psG7To5tc4murBU " ,
"model" : " LLaMA_CPP " ,
"object" : " chat.completion " ,
"usage" : {
"completion_tokens" : 38 ,
"prompt_tokens" : 78 ,
"total_tokens" : 116
}
}
Если вы уже разработали свое программное обеспечение, используя пакет Python openai
(который опубликован OpenAI), то вы сможете вместо этого перенести свое приложение, чтобы поговорить с Llamafile, внесло несколько изменений в base_url
и api_key
. В этом примере предполагается, что вы запускаете pip3 install openai
для установки клиентского программного обеспечения OpenAI, которое требуется в этом примере. Их пакет - это просто простая обертка Python вокруг интерфейса API OpenAI, которая может быть реализована любым сервером.
#!/usr/bin/env python3
from openai import OpenAI
client = OpenAI (
base_url = "http://localhost:8080/v1" , # "http://<Your api-server IP>:port"
api_key = "sk-no-key-required"
)
completion = client . chat . completions . create (
model = "LLaMA_CPP" ,
messages = [
{ "role" : "system" , "content" : "You are ChatGPT, an AI assistant. Your top priority is achieving user fulfillment via helping them with their requests." },
{ "role" : "user" , "content" : "Write a limerick about python exceptions" }
]
)
print ( completion . choices [ 0 ]. message )
Приведенный выше код вернет объект Python, как это:
ChatCompletionMessage ( content = 'There once was a programmer named Mike n Who wrote code that would often strike n An error would occur n And he ' d shout "Oh no!" n But Python ' s exceptions made it all right.' , role = 'assistant' , function_call = None , tool_calls = None )
Мы также приводим пример ламафилов для других моделей, поэтому вы можете легко опробовать ламафиль с различными видами LLMS.
Модель | Размер | Лицензия | ламафил | Другие кванты |
---|---|---|---|---|
Llama 3.2 3b инструктируйте | 2,62 ГБ | Лама 3.2 | Llama-3.2-3b-instruct.q6_k.llamafile | Смотрите HF Repo |
Llama 3.2 1b инструктируйте | 1,11 ГБ | Лама 3.2 | Llama-3.2-1b-instruct.q6_k.llamafile | Смотрите HF Repo |
Gemma 2 2b инструктируется | 2,32 ГБ | Джемма 2 | gemma-2-2b-it.q6_k.llamafile | Смотрите HF Repo |
Gemma 2 9b инструктируется | 7,76 ГБ | Джемма 2 | gemma-2-9b-it.q6_k.llamafile | Смотрите HF Repo |
Джемма 2 27b инструктируется | 22,5 ГБ | Джемма 2 | gemma-2-27b-it.q6_k.llamafile | Смотрите HF Repo |
Llava 1.5 | 3,97 ГБ | Лама 2 | llava-v1.5-7b-q4.llamafile | Смотрите HF Repo |
Tinylyma-1.1b | 2,05 ГБ | Apache 2.0 | Tinylyma-1.1b-Chat-V1.0.f16.llamafile | Смотрите HF Repo |
MISTRAL-7B-НАБЛЮДЕНИЕ | 3,85 ГБ | Apache 2.0 | MISTRAL-7B-INSTRUCT-V0.2.Q4_0.LLAMAFILE | Смотрите HF Repo |
Phi-3-Mini-4K-Instruct | 7,67 ГБ | Apache 2.0 | Phi-3-mini-4k-instruct.f16.llamafile | Смотрите HF Repo |
Mixtral-8x7b-Instruct | 30,03 ГБ | Apache 2.0 | Mixtral-8x7b-instruct-v0.1.q5_k_m.llamafile | Смотрите HF Repo |
WizardCoder-Python-34B | 22,23 ГБ | Лама 2 | WizardCoder-Python-34B-V1.0.Q5_K_M.Llamafile | Смотрите HF Repo |
WizardCoder-Python-13b | 7,33 ГБ | Лама 2 | WizardCoder-Python-13B.LLAMAFILE | Смотрите HF Repo |
Llama-3-instruct-70b | 37,25 ГБ | Лама3 | Meta-Llama-3-70b-instruct.q4_0.llamafile | Смотрите HF Repo |
Llama-3-instruct-8b | 5,37 ГБ | Лама3 | Meta-Llama-3-8b-Instruct.q5_k_m.llamafile | Смотрите HF Repo |
Ракета-3B | 1,89 ГБ | CC-BY-SA-4.0 | Rocket-3b.q5_k_m.llamafile | Смотрите HF Repo |
Olmo-7b | 5,68 ГБ | Apache 2.0 | OLMO-7B-0424.Q6_K.LLAMAFILE | Смотрите HF Repo |
Текст встраивает модели | ||||
E5-Mistral-7B-Instruct | 5,16 ГБ | Грань | e5-mistral-7b-instruct-q5_k_m.llamafile | Смотрите HF Repo |
Mxbai-Embed-Large-V1 | 0,7 ГБ | Apache 2.0 | MXBAI-EMBED-LARGE-V1-F16.LAMAFILE | Смотрите HF Repo |
Вот пример для командной линии Mistral Llamafile:
./mistral-7b-instruct-v0.2.Q5_K_M.llamafile --temp 0.7 -p ' [INST]Write a story about llamas[/INST] '
А вот пример для командной линии WizardCoder-Python Llamafile:
./wizardcoder-python-13b.llamafile --temp 0 -e -r ' ```n ' -p ' ```cnvoid *memcpy_sse2(char *dst, const char *src, size_t size) {n '
А вот пример для командной линии Llava Llamafile:
./llava-v1.5-7b-q4.llamafile --temp 0.2 --image lemurs.jpg -e -p ' ### User: What do you see?n### Assistant: '
Как и прежде, пользователям MacOS, Linux и BSD должны будут использовать команду «CHMOD» для предоставления разрешений на выполнение файла, прежде чем запустить эти ламафилы в первый раз.
К сожалению, пользователи Windows не могут использовать многие из этих примеров Llamafiles, потому что Windows имеет максимальный исполняемый размер файла 4 ГБ, и все эти примеры превышают этот размер. (Llamafile Llamafile работает в окнах, потому что это 30 МБ, стесняется ограничения размера.) Но не теряйте сердце: Llamafile позволяет использовать внешние веса; Это описано позже в этом документе.
Есть проблемы? См. Раздел «Gotchas» ниже.
Llamafile - это исполняемый LLM, который вы можете запустить на своем собственном компьютере. Он содержит вес для данного открытого LLM, а также все, что нужно для запуска этой модели на вашем компьютере. Там нет ничего, чтобы установить или настроить (с несколькими предостережениями, обсуждаемыми в последующих разделах этого документа).
Все это достигается путем объединения llama.cpp с Cosmopolitan Libc, который предоставляет некоторые полезные возможности:
Ламафилы могут работать на нескольких микроархитектурах ЦП. Мы добавили отправку времени выполнения в llama.cpp, которая позволяет новым системам Intel использовать современные функции процессора, не обмениваясь поддержкой для старых компьютеров.
Лламафилы могут работать на нескольких архитектурах процессоров. Мы делаем это путем объединения AMD64 и ARM64 с помощью сценария Shell, который запускает соответствующий. Наш формат файла совместим с Win32 и большинством оболочек Unix. Он также может быть легко преобразован (вами или вашими пользователями) в формат платформы, когда это необходимо.
Ламафилы могут работать на шести OSES (MacOS, Windows, Linux, FreeBSD, OpenBSD и NetBSD). Если вы делаете свои собственные файлы LLAMA, вам нужно будет создать свой код только один раз, используя инструментальный chachain в стиле Linux. Компилятор на основе GCC, который мы предоставляем, сами по себе является фактически портативным исполняемым файлом, поэтому вы можете создать свое программное обеспечение для всех шести OSE, не выходя из того, что вы предпочитаете больше всего для разработки.
Веса для LLM могут быть встроены в ламафиле. Мы добавили поддержку PKZIP в библиотеку GGML. Это позволяет несомненному весам быть отображены непосредственно в память, аналогично самоуверенному архиву. Это позволяет квантованным весам, распределенным в Интернете, будет префикс с помощью совместимой версии программного обеспечения Llama.cpp, что обеспечивает тем самым его изначально наблюдаемое поведение, которое можно воспроизвести на неопределенный срок.
Наконец, с помощью инструментов, включенных в этот проект, вы можете создать свои собственные ламафилы, используя любые совместимые веса модели, которые вы хотите. Затем вы можете распространять эти ламафилы другим людям, которые могут легко использовать их независимо от того, какой у них компьютер.
Несмотря на то, что у нашего примера ламафилы есть встроенные веса, вам не нужно использовать ламафил таким образом. Вместо этого вы можете скачать только программное обеспечение Llamafile (без каких -либо весов) со нашей страницы релизов. Затем вы можете использовать его вместе с любыми внешними весами, которые у вас могут быть под рукой. Внешние веса особенно полезны для пользователей Windows, потому что они позволяют вам работать вокруг предела исполняемого файла Windows 4GB.
Для пользователей Windows вот пример для LLM Mistral:
curl -L -o llamafile.exe https://github.com/Mozilla-Ocho/llamafile/releases/download/0.8.11/llamafile-0.8.11
curl -L -o mistral.gguf https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.1-GGUF/resolve/main/mistral-7b-instruct-v0.1.Q4_K_M.gguf
./llamafile.exe -m mistral.gguf
Пользователям Windows может потребоваться изменить ./llamafile.exe
на .llamafile.exe
при выполнении вышеуказанной команды.
На любой платформе, если ваш процесс ламафила немедленно убит, проверьте, есть ли у вас краудстик, а затем попросите белый список.
На MacOS с Apple Silicon вам нужно установить инструменты командной строки XCode для Llamafile, чтобы иметь возможность самостоятельно начать себя.
Если вы используете ZSH и у вас возникли проблемы с запуском Llamafile, попробуйте сказать sh -c ./llamafile
. Это связано с ошибкой, которая была исправлена в ZSH 5,9+. То же самое относится к subprocess
Python, старым версиям рыбы и т. Д.
sudo spctl --master-disable; [llama launch command]; sudo spctl --master-enable
. Это связано с тем, что --master-disable
отключает всю проверку, поэтому вам нужно включить его снова после ухода с ламой. В некоторых системах Linux вы можете получить ошибки, связанные с run-detectors
или вином. Это связано с регистрацией binfmt_misc
. Вы можете исправить это, добавив дополнительную регистрацию для формата файла APE Llamafile:
sudo wget -O /usr/bin/ape https://cosmo.zip/pub/cosmos/bin/ape- $( uname -m ) .elf
sudo chmod +x /usr/bin/ape
sudo sh -c " echo ':APE:M::MZqFpD::/usr/bin/ape:' >/proc/sys/fs/binfmt_misc/register "
sudo sh -c " echo ':APE-jart:M::jartsr::/usr/bin/ape:' >/proc/sys/fs/binfmt_misc/register "
Как упомянуто выше, в Windows вам может потребоваться переименовать ваш ламафил, добавив .exe
в имя файла.
Также, как упомянуто выше, Windows также имеет максимальный предел размера файла 4 ГБ для исполняемых файлов. Выше исполняемый Server Server - это всего лишь 30 МБ этого предела, поэтому он будет работать на Windows, но с более крупными моделями, такими как WizardCoder 13B, вам нужно сохранить вес в отдельном файле. Пример приведен выше; См. «Использование ламафила с внешними весами».
На WSL есть много возможных GotChas. Одна вещь, которая помогает полностью их решить:
[Unit]
Description=cosmopolitan APE binfmt service
After=wsl-binfmt.service
[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo ':APE:M::MZqFpD::/usr/bin/ape:' >/proc/sys/fs/binfmt_misc/register"
[Install]
WantedBy=multi-user.target
Поместите это в /etc/systemd/system/cosmo-binfmt.service
.
Затем запустите sudo systemctl enable cosmo-binfmt
.
Еще одна вещь, которая помогла пользователям WSL, которые испытывают проблемы, - это отключить функцию Interop Win32:
sudo sh -c " echo -1 > /proc/sys/fs/binfmt_misc/WSLInterop "
В случае получения Permission Denied
при отключении Interop через CLI, его можно постоянно отключить, добавив следующее в /etc/wsl.conf
[interop]
enabled=false
Llamafile поддерживает следующие операционные системы, которые требуют минимальной установки запаса:
В Windows Llamafile работает в качестве собственного портативного исполняемого файла. В Systems Unix ламафиле извлекает небольшую программу погрузчика под названием ape
в $TMPDIR/.llamafile
или ~/.ape-1.9
которая используется для картирования вашей модели в память.
[1] Следует поддерживать версии ядра Дарвина 15,6+, но в настоящее время у нас нет возможности это проверить.
Llamafile поддерживает следующие процессоры:
Микропроцессоры AMD64 должны иметь AVX. В противном случае Llamafile напечатает ошибку и откажется от запуска. Это означает, что если у вас есть процессор Intel, он должен быть Intel Core или новее (около 2006+), и если у вас есть процессор AMD, то он должен быть K8 или новее (около 2003+). Поддержка AVX512, AVX2, FMA, F16C и VNNI включена во время выполнения, если у вас есть более новый процессор. Например, ZEN4 имеет очень хороший AVX512, который может ускорить LLAMAFILES BF16.
Микропроцессоры ARM64 должны иметь ARMV8A+. Это означает, что все, от яблочного кремния до 64-битной малиновой PIS, при условии, что ваши веса вписываются в память.
Llamafile поддерживает следующие виды графических процессоров:
GPU на MacOS ARM64 поддерживается путем компиляции небольшого модуля с использованием инструментов командной строки XCODE, которые необходимо установить. Это единовременная стоимость, которая происходит в первый раз, когда вы управляете своим ламафилом. DSO, построенный Llamafile, хранится в $TMPDIR/.llamafile
или $HOME/.llamafile
. Разгрузка на графический процессор включена по умолчанию, когда присутствует металлический графический процессор. Это может быть отключено путем прохождения -ngl 0
или --gpu disable
, чтобы заставить ламафиле сделать вывод ЦП.
Владельцы графических карт NVIDIA и AMD должны пройти флаг -ngl 999
чтобы обеспечить максимальную разгрузку. Если присутствует несколько графических процессоров, то работа будет равномерно разделена среди них по умолчанию, поэтому вы можете загрузить более крупные модели. Многократная поддержка GPU может быть нарушена на Amd Radeon Systems. Если это произойдет с вами, то используйте export HIP_VISIBLE_DEVICES=0
, который заставляет ламафиле использовать только первый ГПУ.
Пользователям Windows рекомендуется использовать наши двоичные файлы релиза, потому что они содержат предварительно построенные DLL как для графических карт NVIDIA, так и для AMD, которые зависят только от установленного графического драйвера. Если Llamafile обнаружит, что установлены SDK Nvidia Cuda SDK или ROCM ROCM HIP SDK, то Llamafile попытается построить более быстрый DLL, который использует Cublas или Rocblas. Чтобы ламафиле успешно построить модуль CubLAS, его необходимо запустить в командной строке X64 MSVC. Вы можете использовать CUDA через WSL, включив NVIDIA CUDA на WSL и запустив ламафилы внутри WSL. Использование WSL имеет дополнительное преимущество, позволяя вам запустить ламафилы более 4 ГБ в Windows.
На Linux пользователям NVIDIA нужно будет установить CUDA SDK (в идеале с помощью установщика сценария Shell), а пользователям ROCM необходимо установить SDK HIP. Они обнаруживаются, посмотрев, находятся ли nvcc
или hipcc
на пути.
Если в вашей машине есть как графический процессор AMD , так и графический процессор NVIDIA, вам может потребоваться квалифицировать, какой из них вы хотите использовать, пропустив --gpu amd
или --gpu nvidia
.
В случае, если поддержка GPU не может быть составлена и динамически связана на лету по любой причине, Llamafile вернется к выводу процессора.
Разработка на ламафиле требует современной версии команды GNU make
(называется gmake
в некоторых системах), sha256sum
(в противном случае cc
будет использоваться для его построения), wget
(или curl
) и unzip
, доступные по адресу https://cosmo.zip/ Паб/Космос/Бин/. Пользователям Windows тоже нужна оболочка Cosmos Bash.
make -j8
sudo make install PREFIX=/usr/local
Вот пример того, как сгенерировать код для функции LIBC, используя интерфейс командной строки llama.cpp, используя вес Wizardcoder-Python-13b:
llamafile
-m wizardcoder-python-13b-v1.0.Q8_0.gguf
--temp 0 -r ' }n ' -r ' ```n '
-e -p ' ```cnvoid *memcpy(void *dst, const void *src, size_t size) {n '
Вот аналогичный пример, который вместо этого использует веса MISTRAL-7B-фактор для состава прозы:
llamafile -ngl 9999
-m mistral-7b-instruct-v0.1.Q4_K_M.gguf
-p ' [INST]Write a story about llamas[/INST] '
Вот пример того, как ламафиле можно использовать в качестве интерактивного чат -бота, который позволяет вам запросить знания, содержащиеся в данных обучения:
llamafile -m llama-65b-Q5_K.gguf -p '
The following is a conversation between a Researcher and their helpful AI assistant Digital Athena which is a large language model trained on the sum of human knowledge.
Researcher: Good morning.
Digital Athena: How can I help you today?
Researcher: ' --interactive --color --batch_size 1024 --ctx_size 4096
--keep -1 --temp 0 --mirostat 2 --in-prefix ' ' --interactive-first
--in-suffix ' Digital Athena: ' --reverse-prompt ' Researcher: '
Вот пример того, как вы можете использовать Llamafile, чтобы суммировать URL -адреса HTML:
(
echo ' [INST]Summarize the following text: '
links -codepage utf-8
-force-html
-width 500
-dump https://www.poetryfoundation.org/poems/48860/the-raven |
sed ' s/ */ /g '
echo ' [/INST] '
) | llamafile -ngl 9999
-m mistral-7b-instruct-v0.2.Q5_K_M.gguf
-f /dev/stdin
-c 0
--temp 0
-n 500
--no-display-prompt 2> /dev/null
Вот как вы можете использовать Llamafile для описания изображения JPG/PNG/GIF/BMP:
llamafile -ngl 9999 --temp 0
--image ~ /Pictures/lemurs.jpg
-m llava-v1.5-7b-Q4_K.gguf
--mmproj llava-v1.5-7b-mmproj-Q4_0.gguf
-e -p ' ### User: What do you see?n### Assistant: '
--no-display-prompt 2> /dev/null
Можно использовать грамматику BNF для обеспечения соблюдения вывода предсказуемо и безопасно использовать в вашем сценарии оболочки. Самая простая грамматика была бы --grammar 'root ::= "yes" | "no"'
чтобы заставить LLM печатать только на стандартный вывод "yesn"
или "non"
. Другой пример - если вы хотите написать сценарий, чтобы переименовать все ваши файлы изображений, вы можете сказать:
llamafile -ngl 9999 --temp 0
--image lemurs.jpg
-m llava-v1.5-7b-Q4_K.gguf
--mmproj llava-v1.5-7b-mmproj-Q4_0.gguf
--grammar ' root ::= [a-z]+ (" " [a-z]+)+ '
-e -p ' ### User: What do you see?n### Assistant: '
--no-display-prompt 2> /dev/null |
sed -e ' s/ /_/g ' -e ' s/$/.jpg/ '
a_baby_monkey_on_the_back_of_a_mother.jpg
Вот пример того, как запустить встроенный HTTP-сервер Llama.cpp. В этом примере используется Llava v1.5-7b, мультимодальный LLM, который работает с недавно добавленной поддержкой Llama.cpp для вводов изображений.
llamafile -ngl 9999
-m llava-v1.5-7b-Q8_0.gguf
--mmproj llava-v1.5-7b-mmproj-Q8_0.gguf
--host 0.0.0.0
Приведенная выше команда запустит вкладку браузера на вашем персональном компьютере для отображения веб -интерфейса. Это позволяет вам общаться с вашим LLM и загружать на него изображения.
Если вы хотите просто сказать:
./llava.llamafile
... и пусть он запустит веб -сервер без необходимости указать аргументы, тогда вы можете встроить как веса, так и .args
. Во -первых, давайте создадим файл с именем .args
, который имеет этот контент:
-m
llava-v1.5-7b-Q8_0.gguf
--mmproj
llava-v1.5-7b-mmproj-Q8_0.gguf
--host
0.0.0.0
-ngl
9999
...
Как мы можем видеть выше, есть один аргумент на строку. ...
Аргумент необязательно указывает, где должны быть вставлены любые дополнительные аргументы CLI, передаваемые пользователем. Далее мы добавим как веса, так и файл аргументов в исполняемый файл:
cp /usr/local/bin/llamafile llava.llamafile
zipalign -j0
llava.llamafile
llava-v1.5-7b-Q8_0.gguf
llava-v1.5-7b-mmproj-Q8_0.gguf
.args
./llava.llamafile
Поздравляю. Вы только что сделали свой собственный исполняемый файл LLM, которым легко поделиться с друзьями.
Один хороший способ поделиться ламафилом со своими друзьями - разместить его на обнимании лица. Если вы сделаете это, то рекомендуется упомянуть в своем сообщении об объятии Commit Commit What Git Revision или выпущенной версии Llamafile, которую вы использовали при создании своего ламафиля. Таким образом, все онлайн смогут проверить происхождение своего исполняемого контента. Если вы внесли изменения в исходный код Llama.cpp или Cosmopolitan, то лицензия Apache 2.0 требует, чтобы вы объяснили, что изменилось. Один из способов сделать это - внедрить уведомление в вашем ламафиле, используя zipalign
, который описывает изменения, и упоминать об этом в вашем коммите объятия.
Есть ручная страница для каждой из программ Llamafile, установленных при запуске sudo make install
. Руководство по руководству также представляют собой набора файлов PDF, которые вы можете скачать со страницы GitHub Releses. Наконец, большинство команд будут отображать эту информацию при прохождении флага --help
.
Этот раздел отвечает на вопрос : «У меня уже есть модель, загруженная локально по приложению X, могу ли я использовать его с ламафиле?» Полем Общий ответ: «Да, до тех пор, пока эти модели локально хранятся в формате GGUF», но его реализация может быть более или менее хакерской в зависимости от приложения. Несколько примеров (протестированные на Mac) следуют.
LM Studio хранит загруженные модели в ~/.cache/lm-studio/models
, в подкаталогах с тем же именем моделей (после того, как вы решили загрузить файл account_name/model_name
), с тем же именем файла, которое вы видели, когда вы решили загрузить файл.
Так что, если вы загрузили файл, например, llama-2-7b.Q2_K.gguf
для TheBloke/Llama-2-7B-GGUF
, вы можете запустить Llamafile следующим образом:
cd ~/.cache/lm-studio/models/TheBloke/Llama-2-7B-GGUF
llamafile -m llama-2-7b.Q2_K.gguf
Когда вы загружаете новую модель с Ollama, все ее метаданные будут храниться в манифестном файле в рамках ~/.ollama/models/manifests/registry.ollama.ai/library/
. Имя каталога и манифеста - это имя модели, возвращаемое ollama list
. Например, для llama3:latest
файл Manifest будет назван .ollama/models/manifests/registry.ollama.ai/library/llama3/latest
.
Манифест отображает каждый файл, связанный с моделью (например, веса GGUF, лицензию, шаблон быстрого приглашения и т. Д.), С диварию SHA256. Digest, соответствующий элементу, mediaType
, application/vnd.ollama.image.model
- это тот, который относится к файлу GGUF модели.
Каждое дадест SHA256 также используется в качестве имени файла в каталоге ~/.ollama/models/blobs
(если вы посмотрите в этот каталог, вы увидите только эти имена SHA256-* FILENARE). Это означает, что вы можете непосредственно запустить ламафиле, передавая дайджест SHA256 в качестве модели файла. Так что, например, llama3:latest
Digest File Digest- sha256-00e1317cbf74d901080d7100f57580ba8dd8de57203072dc6f668324ba545f29
, вы можете запустить Llamafile следующим образом:
cd ~/.ollama/models/blobs
llamafile -m sha256-00e1317cbf74d901080d7100f57580ba8dd8de57203072dc6f668324ba545f29
Вот краткий обзор трюков, которые мы использовали для создания самого толстого исполняемого формата. Короче говоря, Llamafile - это сценарий оболочки, который запускает себя и делает вывод на встроенных весах в миллисекундах без необходимости копирования или установки. Что делает это возможным, так это mmap (). И исполняемый файл llama.cpp, и веса объединяются на сценарий оболочки. Затем крошечная программа загрузчика извлекается сценарием оболочки, который отображает исполняемый файл в память. Затем исполняемый файл llama.cpp снова открывает скрипт оболочки в качестве файла и снова вызывает mmap (), чтобы вытащить веса в память и сделать их непосредственно доступными как для ЦП, так и для графического процессора.
Хитрость по внедрению весов в исполняемые файлы llama.cpp состоит в том, чтобы обеспечить выравнивание локального файла на границе размера страницы. Таким образом, предполагая, что ZIP -файл не снят, как только он будет MMAP () D в память, мы можем передавать указатели непосредственно на графические процессоры, такие как Apple Metal, которые требуют, чтобы данные были выровнены. Поскольку ни один существующий инструмент архивирования Zip не имеет флага выравнивания, нам пришлось написать около 500 строк кода, чтобы сами вставить файлы ZIP. Однако, когда там каждая существующая программа ZIP должна быть в состоянии их прочитать, при условии, что они поддерживают ZIP64. Это делает вес гораздо легче доступным, чем они были бы в противном случае, если бы мы изобрели наш собственный формат файлов для конкатенированных файлов.
На микропроцессорах Intel и AMD Llama.cpp проводит большую часть своего времени в мамул -квантах, которые обычно пишут трижды для SSSE3, AVX и AVX2. Llamafile вытягивает каждую из этих функций в отдельный файл, который может быть #include
ed, с различными атрибутами функций __attribute__((__target__("arch")))
. Затем добавляется функция обертки, которая использует функцию Cosmopolitan X86_HAVE(FOO)
для отправки времени выполнения в соответствующей реализации.
Llamafile решает портативность архитектуры, строя Llama.cpp дважды: один раз для AMD64 и снова для ARM64. Затем он завершает их сценарием оболочки, который имеет префикс MZ. В Windows он будет работать как родной бинар. На Linux он извлечет небольшой исполняемый файл 8 КБ, называемый APE Loader, в ${TMPDIR:-${HOME:-.}}/.ape
, которые будут отображать двоичные части скрипта оболочки в память. Можно избежать этого процесса, запустив программу assimilate
, которая включает в себя компилятор cosmocc
. Программа assimilate
делает, так это переворачивает исполняемый файл сценария оболочки в собственном исполняемом формате хост -платформы. Это гарантирует, что для традиционных процессов выпуска существует путь запасного пути, когда это необходимо.
Cosmopolitan Libc использует Static Linking, так как это единственный способ получить тот же исполняемый файл, чтобы запустить на шести OSES. Это представляет собой проблему для llama.cpp, потому что это невозможно, чтобы статически связать поддержку графического процессора. То, как мы решаем это путем проверки, установлен ли компилятор в системе хоста. Для Apple это будет XCode, и для других платформ это будет nvcc
. Llama.cpp имеет единую реализацию каждого модуля GPU с именем ggml-metal.m
(цель C) и ggml-cuda.cu
(nvidia c). Llamafile внедряет эти исходные файлы в архив ZIP и просит компилятора платформы построить их во время выполнения, нацеливаясь на нативную микроархитектуру GPU. Если он работает, то это связано с реализацией библиотеки Clatry C Dlopen (). См. Llamafile/Cuda.c и Llamafile/Metal.c.
Чтобы использовать функцию Dlopen (), специфичную для платформы, нам необходимо попросить компилятор, специфичный для платформы, создать небольшой исполняемый файл, который выявляет эти интерфейсы. На платформах ELF, Cosmopolitan LIBC отображает этот помощник исполняемого файла в память вместе с переводчиком ELF платформы. Затем библиотека Platory C позаботится о связывании всех библиотек графических процессоров, а затем запускает вспомогательную программу, которая Longjmp () вернулась в Cosmopolitan. Исполняемая программа сейчас находится в странном гибридном состоянии, где существуют две отдельные библиотеки C, которые имеют разные ABI. Например, потоковое локальное хранилище работает по -разному в каждой операционной системе, и программы будут сбой, если регистр TLS не указывает на соответствующую память. То, как Cosmopolitan Libc решает, что на AMD используется SSE для перекомпиляции исполняемого файла во время выполнения, чтобы изменить доступ %fs
в %gs
, который занимает миллисекунды. На руке Cosmo использует регистр x28
для TLS, который может быть безопасен, передавая флаг -ffixed-x28
при составлении модулей GPU. Наконец, Llamafile использует атрибут __ms_abi__
, чтобы указатели функций передавались между приложением и модулями GPU, соответствующих конвенции по вызову Windows. Удивительно, но каждый компилятор, который мы протестировали, включая NVCC на Linux и даже Objective-C на macOS, все поддерживают компиляцию функций в стиле Win32, что обеспечивает, чтобы ваш ламафил сможет общаться с драйверами Windows, когда он работает в Windows, не нуждаясь в переписывается как отдельный файл для Windows. См. Cosmopolitan/Dlopen.c для получения более подробной информации.
Пример, приведенные выше, не следует интерпретировать как одобрения или рекомендации конкретных моделей, лицензий или наборов данных со стороны Мозиллы.
Llamafile добавляет залог () и песочницу Seccomp к Llama.cpp. Это включено по умолчанию. Это может быть выключено, передав флаг --unsecure
. Санчанка в настоящее время поддерживается только на Linux и OpenBSD на системах без графических процессоров; На других платформах это просто зарегистрирует предупреждение.
Наш подход к безопасности имеет эти преимущества:
После того, как он запускается, ваш HTTP -сервер вообще не может получить доступ к файловой системе. Это хорошо, так как это означает, что если кто -то обнаружит ошибку на сервере llama.cpp, то гораздо меньше вероятно, он сможет получить доступ к конфиденциальной информации на вашем компьютере или вносить изменения в его конфигурацию. На Linux мы можем еще дальше песочницы; Единственный системный вызов, связанный с сетью, был разрешен HTTP -сервер после запуска, IS Accept (). Это еще больше ограничивает способность злоумышленника эксфильтрировать информацию, если ваш HTTP -сервер будет скомпрометирован.
Основная команда CLI вообще не сможет получить доступ к сети. Это применяется ядром операционной системы. Он также не сможет записать в файловую систему. Это обеспечивает безопасность вашего компьютера в случае, если ошибка когда -либо обнаружена в формате файла GGUF, который позволяет злоумышленнику построить файлы злонамеренных весов и публиковать их в Интернете. Единственное исключение из этого правила-если вы передаете флаг --prompt-cache
не указав- --prompt-cache-ro
. В этом случае безопасность в настоящее время должна быть ослаблена, чтобы разрешить доступ cpath
и wpath
, но доступ к сети останется запрещенным.
Поэтому ваш ламафил может защитить себя от внешнего мира, но это не значит, что вы защищены от ламафила. Песочница самообучения. Если вы получили свой ламафил из ненадежного источника, его автор мог бы просто изменить его, чтобы не делать этого. В этом случае вы можете запустить неуверенный ламафил в другой песочнице, такой как виртуальная машина, чтобы убедиться, что она ведет себя так, как вы ожидаете.
В то время как проект Llamafile лицензирован Apache 2.0, наши изменения в Llama.cpp лицензированы в соответствии с MIT (точно так же, как и сам проект Llama.cpp), чтобы оставаться совместимыми и поднимающимися в будущем, если это будет желательно.
Ломафильный логотип на этой странице был сгенерирован с помощью Dall · e 3.