Instructions to use Mharbulous/moondream2-syncopaid with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use Mharbulous/moondream2-syncopaid with llama.cpp:
Install (macOS, Linux)
curl -LsSf https://llama.app/install.sh | sh # Start a local OpenAI-compatible server with a web UI: llama serve -hf Mharbulous/moondream2-syncopaid:F16 # Run inference directly in the terminal: llama cli -hf Mharbulous/moondream2-syncopaid:F16
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf Mharbulous/moondream2-syncopaid:F16 # Run inference directly in the terminal: llama cli -hf Mharbulous/moondream2-syncopaid:F16
Use pre-built binary
# Download pre-built binary from: # https://github.com/ggerganov/llama.cpp/releases # Start a local OpenAI-compatible server with a web UI: ./llama-server -hf Mharbulous/moondream2-syncopaid:F16 # Run inference directly in the terminal: ./llama-cli -hf Mharbulous/moondream2-syncopaid:F16
Build from source code
git clone https://github.com/ggerganov/llama.cpp.git cd llama.cpp cmake -B build cmake --build build -j --target llama-server llama-cli # Start a local OpenAI-compatible server with a web UI: ./build/bin/llama-server -hf Mharbulous/moondream2-syncopaid:F16 # Run inference directly in the terminal: ./build/bin/llama-cli -hf Mharbulous/moondream2-syncopaid:F16
Use Docker
docker model run hf.co/Mharbulous/moondream2-syncopaid:F16
- LM Studio
- Jan
- vLLM
How to use Mharbulous/moondream2-syncopaid with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "Mharbulous/moondream2-syncopaid" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Mharbulous/moondream2-syncopaid", "prompt": "Once upon a time,", "max_tokens": 512, "temperature": 0.5 }'Use Docker
docker model run hf.co/Mharbulous/moondream2-syncopaid:F16
- Ollama
How to use Mharbulous/moondream2-syncopaid with Ollama:
ollama run hf.co/Mharbulous/moondream2-syncopaid:F16
- Unsloth Studio
How to use Mharbulous/moondream2-syncopaid with Unsloth Studio:
Install Unsloth Studio (macOS, Linux, WSL)
curl -fsSL https://unsloth.ai/install.sh | sh # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for Mharbulous/moondream2-syncopaid to start chatting
Install Unsloth Studio (Windows)
irm https://unsloth.ai/install.ps1 | iex # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for Mharbulous/moondream2-syncopaid to start chatting
Using HuggingFace Spaces for Unsloth
# No setup required # Open https://huggingface.co/spaces/unsloth/studio in your browser # Search for Mharbulous/moondream2-syncopaid to start chatting
- Atomic Chat new
- Docker Model Runner
How to use Mharbulous/moondream2-syncopaid with Docker Model Runner:
docker model run hf.co/Mharbulous/moondream2-syncopaid:F16
- Lemonade
How to use Mharbulous/moondream2-syncopaid with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull Mharbulous/moondream2-syncopaid:F16
Run and chat with the model
lemonade run user.moondream2-syncopaid-F16
List all available models
lemonade list
| import torch | |
| import torch.nn as nn | |
| import torch.nn.functional as F | |
| from dataclasses import dataclass | |
| from typing import Literal, Optional | |
| try: | |
| from torchao import quantize_ | |
| from torchao.quantization import int4_weight_only | |
| except ImportError: | |
| def quantize_(model, quant_mode): | |
| raise ImportError( | |
| "torchao is not installed. Please install it with `pip install torchao`." | |
| ) | |
| def int4_weight_only(group_size): | |
| raise ImportError( | |
| "torchao is not installed. Please install it with `pip install torchao`." | |
| ) | |
| def gelu_approx(x): | |
| return F.gelu(x, approximate="tanh") | |
| class LinearWeights: | |
| weight: torch.Tensor | |
| bias: torch.Tensor | |
| def linear(x: torch.Tensor, w: LinearWeights) -> torch.Tensor: | |
| return F.linear(x, w.weight, w.bias) | |
| def dequantize_tensor(W_q, scale, zero, orig_shape, dtype=torch.bfloat16): | |
| _step = W_q.shape[0] | |
| W_r = torch.empty([2 * _step, W_q.shape[1]], dtype=dtype, device=W_q.device) | |
| W_r[:_step] = (W_q & 0b11110000) >> 4 | |
| W_r[_step:] = W_q & 0b00001111 | |
| W_r.sub_(zero).mul_(scale) | |
| return W_r.reshape(orig_shape) | |
| class QuantizedLinear(nn.Module): | |
| def __init__( | |
| self, | |
| in_features: int, | |
| out_features: int, | |
| dtype: torch.dtype, | |
| ): | |
| # TODO: Take group_size as an input instead of hardcoding it here. | |
| super().__init__() | |
| self.in_features = in_features | |
| self.out_features = out_features | |
| self.weight = nn.ParameterDict( | |
| { | |
| "packed": nn.Parameter( | |
| torch.empty( | |
| out_features * in_features // (128 * 2), 128, dtype=torch.uint8 | |
| ), | |
| requires_grad=False, | |
| ), | |
| "scale": nn.Parameter( | |
| torch.empty(out_features * in_features // 128, 1), | |
| requires_grad=False, | |
| ), | |
| "zero_point": nn.Parameter( | |
| torch.empty(out_features * in_features // 128, 1), | |
| requires_grad=False, | |
| ), | |
| } | |
| ) | |
| self.bias = nn.Parameter(torch.empty(out_features), requires_grad=False) | |
| self.unpacked = False | |
| def unpack(self): | |
| if self.unpacked: | |
| return | |
| self.weight = nn.Parameter( | |
| dequantize_tensor( | |
| self.weight["packed"], | |
| self.weight["scale"], | |
| self.weight["zero_point"], | |
| (self.out_features, self.in_features), | |
| torch.bfloat16, | |
| ) | |
| ) | |
| with torch.device("meta"): | |
| self.linear = nn.Linear( | |
| self.in_features, self.out_features, dtype=torch.bfloat16 | |
| ) | |
| self.linear.weight = self.weight | |
| self.linear.bias = nn.Parameter( | |
| self.bias.to(torch.bfloat16), requires_grad=False | |
| ) | |
| del self.weight, self.bias | |
| quantize_(self, int4_weight_only(group_size=128)) | |
| self.unpacked = True | |
| torch.cuda.empty_cache() | |
| def forward(self, x: torch.Tensor) -> torch.Tensor: | |
| if not self.unpacked: | |
| self.unpack() | |
| return self.linear(x) | |
| class LayerNormWeights: | |
| weight: torch.Tensor | |
| bias: torch.Tensor | |
| def layer_norm(x: torch.Tensor, w: LayerNormWeights) -> torch.Tensor: | |
| return F.layer_norm(x, w.bias.shape, w.weight, w.bias) | |
| class MLPWeights: | |
| fc1: LinearWeights | |
| fc2: LinearWeights | |
| act: Literal["gelu_approx"] = "gelu_approx" | |
| def mlp(x: torch.Tensor, w: MLPWeights, lora: Optional[dict] = None) -> torch.Tensor: | |
| x0 = w.fc1(x) | |
| if lora is not None: | |
| x1 = F.linear(F.linear(x, lora["fc1"]["A"]), lora["fc1"]["B"]) | |
| x = x0 + x1 | |
| else: | |
| x = x0 | |
| x = gelu_approx(x) | |
| x0 = w.fc2(x) | |
| if lora is not None: | |
| x1 = F.linear(F.linear(x, lora["fc2"]["A"]), lora["fc2"]["B"]) | |
| x = x0 + x1 | |
| else: | |
| x = x0 | |
| return x | |
| class AttentionWeights: | |
| qkv: LinearWeights | |
| proj: LinearWeights | |
| def attn(x: torch.Tensor, w: AttentionWeights, n_heads: int) -> torch.Tensor: | |
| bsz, q_len, d_model = x.shape | |
| head_dim = d_model // n_heads | |
| q, k, v = [ | |
| t.view(bsz, q_len, n_heads, head_dim).transpose(1, 2) | |
| for t in linear(x, w.qkv).chunk(3, dim=-1) | |
| ] | |
| out = F.scaled_dot_product_attention(q, k, v) | |
| out = out.transpose(1, 2).reshape(bsz, q_len, d_model) | |
| out = linear(out, w.proj) | |
| return out | |