verwenden#
Xinference lokal ausführen#
Lassen Sie uns anhand eines klassischen Large Language Models qwen2.5-instruct zeigen, wie man ein großes Modell lokal mit Xinference ausführt.
Nach dieser Schnelleinführung können Sie lernen, wie Sie Xinference in einer verteilten Cluster-Umgebung bereitstellen.
Starten Sie den lokalen Dienst.#
Folgen Sie zunächst der Anleitung in diesem Dokument, um sicherzustellen, dass Xinference lokal installiert ist. Starten Sie den lokalen Xinference-Dienst mit dem folgenden Befehl:
xinference-local --host 0.0.0.0 --port 9997
INFO Xinference supervisor 0.0.0.0:64570 started
INFO Xinference worker 0.0.0.0:64570 started
INFO Starting Xinference at endpoint: http://0.0.0.0:9997
INFO Uvicorn running on http://0.0.0.0:9997 (Press CTRL+C to quit)
Bemerkung
Standardmäßig verwendet Xinference <HOME>/.xinference als Hauptverzeichnis, um einige notwendige Informationen wie Protokolldateien und Modelldateien zu speichern, wobei <HOME> das Hauptverzeichnis des aktuellen Benutzers ist.
Sie können das Hauptverzeichnis ändern, indem Sie die Umgebungsvariable XINFERENCE_HOME konfigurieren, z. B.:
XINFERENCE_HOME=/tmp/xinference xinference-local --host 0.0.0.0 --port 9997
Glückwunsch! Sie haben den Xinference-Dienst lokal gestartet. Sobald der Xinference-Dienst läuft, kann er auf verschiedene Weise genutzt werden, darunter über die Webseite, cURL-Befehle, die Befehlszeile oder das Xinference Python SDK.
Die Benutzeroberfläche kann über http://127.0.0.1:9997/ui aufgerufen werden, die API-Dokumentation über http://127.0.0.1:9997/docs.
Nach der Installation über den folgenden Befehl kann es mit dem Xinference-Befehlszeilentool oder Python-Code verwendet werden:
pip install xinference
Das Befehlszeilen-Tool ist xinference. Mit dem folgenden Befehl können Sie sehen, welche Befehle verfügbar sind:
xinference --help
Usage: xinference [OPTIONS] COMMAND [ARGS]...
Options:
-v, --version Show the version and exit.
--log-level TEXT
-H, --host TEXT
-p, --port INTEGER
--help Show this message and exit.
Commands:
cached
cal-model-mem
chat
engine
generate
launch
list
login
register
registrations
remove-cache
stop-cluster
terminate
unregister
vllm-models
Wenn nur das Python SDK von Xinference installiert werden muss, kann der folgende Befehl verwendet werden, um die minimalen Abhängigkeiten zu installieren. Beachten Sie, dass die Version mit der Version des Xinference-Dienstes übereinstimmen muss.
pip install xinference-client==${SERVER_VERSION}
Über die Inferenz-Engine des Modells#
Ab Version v0.11.0 müssen Sie vor dem Laden eines LLM-Modells die spezifische Inferenz-Engine angeben. Derzeit unterstützt Xinference die folgenden Inferenz-Engines:
vllmsglangllama.cpptransformersMLX
Ausführliche Informationen zu diesen Inferenz-Engines finden Sie unter hier.
Beachten Sie, dass beim Laden eines LLM-Modells die ausführbare Engine eng mit den Parametern model_format und quantization zusammenhängt.
Xinference bietet den Befehl xinference engine, um Ihnen bei der Abfrage relevanter Parameterkombinationen zu helfen.
Zum Beispiel:
Ich möchte die Parameterkombinationen für das
qwen-chat-Modell abfragen, um zu bestimmen, wie es auf verschiedenen Inferenz-Engines ausgeführt werden kann.
xinference engine -e <xinference_endpoint> --model-name qwen-chat
Ich möchte
qwen-chatauf derVLLM-Inferenz-Engine ausführen, weiß aber nicht, welche anderen Parameter dafür geeignet sind.
xinference engine -e <xinference_endpoint> --model-name qwen-chat --model-engine vllm
Ich möchte das
qwen-chatModell imGGUFFormat laden und benötige die restlichen Parameterkombinationen.
xinference engine -e <xinference_endpoint> --model-name qwen-chat -f ggufv2
Zusammenfassend, im Vergleich zu früheren Versionen muss beim Laden eines LLM-Modells zusätzlich der Parameter model_engine übergeben werden. Sie können mit dem Befehl xinference engine die Beziehung zwischen der gewünschten Inference-Engine und anderen Parameterkombinationen abfragen.
Bemerkung
Bezüglich der Frage, wann welche Engine verwendet werden sollte, hier einige Empfehlungen:
Linux
Verwenden Sie, wenn möglich, bevorzugt vLLM oder SGLang, da diese eine bessere Leistung bieten.
Wenn die Ressourcen begrenzt sind, kann die Verwendung von llama.cpp in Betracht gezogen werden, da es mehr Quantisierungsoptionen bietet.
Andere Überlegungen zur Nutzung: Verwenden Sie Transformers, das nahezu alle Modelle unterstützt.
Windows
Es wird empfohlen, WSL zu verwenden. Wählen Sie in diesem Fall die für Linux passende Option.
Ansonsten wird llama.cpp empfohlen. Für nicht unterstützte Modelle wählen Sie Transformers.
Mac
Wenn vom Modell unterstützt, wird die Verwendung der MLX-Engine empfohlen, da sie die beste Leistung bietet.
Ansonsten wird llama.cpp empfohlen; für nicht unterstützte Modelle wählen Sie Transformers.
qwen2.5-instruct ausführen#
Lassen Sie uns ein integriertes qwen2.5-instruct-Modell ausführen. Wenn Sie ein Modell zum ersten Mal ausführen, müssen die Modellparameter von HuggingFace heruntergeladen werden. In der Regel dauert dies je nach Modellgröße zwischen 10 und 30 Minuten. Nachdem der Download abgeschlossen ist, wird Xinference die Daten lokal zwischenspeichern, sodass ein erneutes Herunterladen beim nächsten Ausführen desselben Modells nicht erforderlich ist.
Bemerkung
Xinference erlaubt es auch, Modelle von anderen Modell-Hosting-Plattformen herunterzuladen. Dies kann durch die Angabe von Umgebungsvariablen beim Starten von Xinference erfolgen. Wenn Sie beispielsweise ein Modell von ModelScope herunterladen möchten, können Sie den folgenden Befehl verwenden:
XINFERENCE_MODEL_SRC=modelscope xinference-local --host 0.0.0.0 --port 9997
Der Modell-UID kann mit dem Parameter --model-uid oder -u angegeben werden. Wenn keine Angabe erfolgt, generiert Xinference eine zufällige ID. Die Standard-ID entspricht dem Modellnamen.
xinference launch --model-engine <inference_engine> -n qwen2.5-instruct -s 0_5 -f pytorch
curl -X 'POST' \
'http://127.0.0.1:9997/v1/models' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"model_engine": "<inference_engine>",
"model_name": "qwen2.5-instruct",
"model_format": "pytorch",
"size_in_billions": "0_5"
}'
from xinference.client import RESTfulClient
client = RESTfulClient("http://127.0.0.1:9997")
model_uid = client.launch_model(
model_engine="<inference_engine>",
model_name="qwen2.5-instruct",
model_format="pytorch",
size_in_billions="0_5"
)
print('Model uid: ' + model_uid)
Model uid: qwen2.5-instruct
Bemerkung
Für einige Inferenz-Engines wie vllm müssen Benutzer enginespezifische Parameter beim Ausführen des Modells angeben. In diesem Fall reicht es aus, den entsprechenden Parameternamen und Wert direkt in der Befehlszeile anzugeben, z. B.:
xinference launch --model-engine vllm -n qwen2.5-instruct -s 0_5 -f pytorch --gpu_memory_utilization 0.9
Beim Ausführen des Modells wird gpu_memory_utilization=0.9 an das vllm-Backend übergeben.
Bemerkung
Weitere Tipps zum Laden von Modellen finden Sie unter Modell-Ladeanleitung.
An diesem Punkt gratuliere ich dir, dass du qwen2.5-instruct erfolgreich über Xinference zum Laufen gebracht hast. Sobald dieses Modell läuft, können wir über die Befehlszeile, cURL oder Python-Code damit interagieren:
curl -X 'POST' \
'http://127.0.0.1:9997/v1/chat/completions' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen2.5-instruct",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "What is the largest animal?"
}
]
}'
from xinference.client import RESTfulClient
client = RESTfulClient("http://127.0.0.1:9997")
model = client.get_model("qwen2.5-instruct")
model.chat(
messages=[
{"role": "user", "content": "Who won the world series in 2020?"}
]
)
{
"id": "chatcmpl-8d76b65a-bad0-42ef-912d-4a0533d90d61",
"model": "qwen2.5-instruct",
"object": "chat.completion",
"created": 1688919187,
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "The largest animal that has been scientifically measured is the blue whale, which has a maximum length of around 23 meters (75 feet) for adult animals and can weigh up to 150,000 pounds (68,000 kg). However, it is important to note that this is just an estimate and that the largest animal known to science may be larger still. Some scientists believe that the largest animals may not have a clear \"size\" in the same way that humans do, as their size can vary depending on the environment and the stage of their life."
},
"finish_reason": "None"
}
],
"usage": {
"prompt_tokens": -1,
"completion_tokens": -1,
"total_tokens": -1
}
}
Xinference bietet eine mit OpenAI kompatible API, sodass das auf Xinference ausgeführte Modell als lokale Alternative zu OpenAI verwendet werden kann. Zum Beispiel:
from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:9997/v1", api_key="not used actually")
response = client.chat.completions.create(
model="qwen2.5-instruct",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "What is the largest animal?"}
]
)
print(response)
Folgende OpenAI-APIs werden unterstützt:
Dialogen generieren: https://platform.openai.com/docs/api-reference/chat
Vektorerstellung: https://platform.openai.com/docs/api-reference/embeddings
Xinference unterstützt auch den Aufruf der Anthropic API über die Basis-URL http://127.0.0.1:9997/anthropic, sodass Sie Xinference in Umgebungen wie Claude Code verwenden können. Weitere Einzelheiten finden Sie unter anthropic client.
Modell verwalten#
Neben dem Starten von Modellen bietet Xinference die Möglichkeit, den gesamten Lebenszyklus eines Modells zu verwalten. Ebenso können Sie dies über die Befehlszeile, cURL und Python-Code tun:
Hier ist die Liste aller von Xinference unterstützten Modelle, kategorisiert nach Typ:
xinference registrations -t LLM
curl http://127.0.0.1:9997/v1/model_registrations/LLM
from xinference.client import RESTfulClient
client = RESTfulClient("http://127.0.0.1:9997")
print(client.list_model_registrations(model_type='LLM'))
Der folgende Befehl listet alle derzeit ausgeführten Modelle auf:
xinference list
curl http://127.0.0.1:9997/v1/models
from xinference.client import RESTfulClient
client = RESTfulClient("http://127.0.0.1:9997")
print(client.list_models())
Wenn Sie ein bestimmtes laufendes Modell nicht mehr benötigen, können Sie es wie folgt stoppen und die Ressourcen freigeben:
xinference terminate --model-uid "qwen2.5-instruct"
curl -X DELETE http://127.0.0.1:9997/v1/models/qwen2.5-instruct
from xinference.client import RESTfulClient
client = RESTfulClient("http://127.0.0.1:9997")
client.terminate_model(model_uid="qwen2.5-instruct")
Hier ist die Übersetzung:#
Um Xinference in einer Cluster-Umgebung bereitzustellen, muss auf einer Maschine ein Supervisor-Knoten gestartet werden, und auf derselben oder anderen Knoten müssen Worker-Knoten gestartet werden.
Befolgen Sie zunächst die Anweisungen in der Dokumentation, um sicherzustellen, dass Xinference auf allen Servern installiert ist. Gehen Sie dann wie folgt vor:
Supervisor starten#
Führen Sie den folgenden Befehl auf dem Server aus, um den Supervisor-Knoten zu starten:
xinference-supervisor -H "${supervisor_host}"
Ersetzen Sie ${supervisor_host} durch die IP-Adresse des aktuellen Knotens.
Die Web-Benutzeroberfläche ist unter http://${supervisor_host}:9997/ui erreichbar, die API-Dokumentation unter http://${supervisor_host}:9997/docs.
Worker starten#
Führen Sie auf dem Rechner, der den Xinference-Worker starten soll, den folgenden Befehl aus:
xinference-worker -e "http://${supervisor_host}:9997" -H "${worker_host}"
Bemerkung
Es ist zu beachten, dass die IP des aktuellen Worker-Knotens verwendet werden muss, um ${worker_host} zu ersetzen.
Bemerkung
Beachten Sie, dass Sie bei der Interaktion mit dem Cluster über die Befehlszeile die Supervisor-Adresse mit dem Parameter -e oder --endpoint angeben sollten, zum Beispiel:
xinference launch -n qwen2.5-instruct -s 0_5 -f pytorch -e "http://${supervisor_host}:9997"
Verwendung von Docker zur Bereitstellung von Xinference#
Führen Sie Xinference mit dem folgenden Befehl im Container aus:
Auf einem Rechner mit NVIDIA-Grafikkarte ausführen.#
Für CUDA 12.4:
docker run -e XINFERENCE_MODEL_SRC=modelscope -p 9998:9997 --gpus all xprobe/xinference:<your_version> xinference-local -H 0.0.0.0 --log-level debug
Für CUDA 12.8:
Added in version v1.8.1: Die CUDA 12.8 Version ist experimentell. Wir freuen uns über Ihr Feedback zur Verbesserung.
Geändert in Version v1.16.0: CUDA 12.8 wurde in v1.16.0 entfernt.
docker run -e XINFERENCE_MODEL_SRC=modelscope -p 9998:9997 --gpus all xprobe/xinference:<your_version>-cu128 xinference-local -H 0.0.0.0 --log-level debug
Für CUDA 12.9:
Added in version v1.16.0: Mit der Veröffentlichung von Xinference v2.0.0 wird CUDA 12.9 zur Standardversion.
docker run -e XINFERENCE_MODEL_SRC=modelscope -p 9998:9997 --gpus all xprobe/xinference:<your_version>-cu129 xinference-local -H 0.0.0.0 --log-level debug
Auf einem Rechner nur mit CPU ausführen.#
docker run -e XINFERENCE_MODEL_SRC=modelscope -p 9998:9997 xprobe/xinference:<your_version>-cpu xinference-local -H 0.0.0.0 --log-level debug
Ersetzen Sie <your_version> durch die Version von Xinference, z. B. v0.10.3. Sie können latest für die neueste Version verwenden.
Weitere Informationen zur Verwendung von Docker finden Sie unter Verwendung des Docker-Images.
Mehr#
Herzlichen Glückwunsch! Du hast bereits grundlegende Kenntnisse in der Verwendung von Xinference erlangt! Um dir die Arbeit mit dem Tool zu erleichtern, findest du hier weitere Dokumentationen und Leitfäden: