-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
214 lines (192 loc) · 7.54 KB
/
Copy pathMakefile
File metadata and controls
214 lines (192 loc) · 7.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
# Makefile for dasheng-audiogen
# Wraps CMake commands for convenience
BUILD_DIR_CPU := build-cpu
BUILD_DIR_METAL := build-metal
BUILD_DIR_CUDA := build-cuda
CMAKE_FLAGS := -DCMAKE_BUILD_TYPE=Release
# Default target
.PHONY: all
all: metal
# CPU-only build
.PHONY: cpu
cpu:
@mkdir -p $(BUILD_DIR_CPU)
cmake -B $(BUILD_DIR_CPU) -S . $(CMAKE_FLAGS) \
-DDASHENG_AUDIOGEN_METAL=OFF \
-DDASHENG_AUDIOGEN_CUDA=OFF
cmake --build $(BUILD_DIR_CPU) --parallel
@echo "CPU build complete: $(BUILD_DIR_CPU)/dasheng-audiogen"
# Metal build (macOS)
.PHONY: metal
metal:
@mkdir -p $(BUILD_DIR_METAL)
cmake -B $(BUILD_DIR_METAL) -S . $(CMAKE_FLAGS) \
-DDASHENG_AUDIOGEN_METAL=ON \
-DDASHENG_AUDIOGEN_CUDA=OFF
cmake --build $(BUILD_DIR_METAL) --parallel
@echo "Metal build complete: $(BUILD_DIR_METAL)/dasheng-audiogen"
# CUDA build
.PHONY: cuda
cuda:
@mkdir -p $(BUILD_DIR_CUDA)
cmake -B $(BUILD_DIR_CUDA) -S . $(CMAKE_FLAGS) \
-DDASHENG_AUDIOGEN_METAL=OFF \
-DDASHENG_AUDIOGEN_CUDA=ON
cmake --build $(BUILD_DIR_CUDA) --parallel
@echo "CUDA build complete: $(BUILD_DIR_CUDA)/dasheng-audiogen"
# Build all targets
.PHONY: build-all
build-all: cpu metal
# Clean all build directories
.PHONY: clean
clean:
rm -rf $(BUILD_DIR_CPU) $(BUILD_DIR_METAL) $(BUILD_DIR_CUDA)
# Clean and rebuild
.PHONY: rebuild
rebuild: clean all
# Run smoke test (CPU)
.PHONY: test-smoke
test-smoke: cpu
$(BUILD_DIR_CPU)/dasheng-audiogen --smoke-test
# Run smoke test (Metal)
.PHONY: test-smoke-metal
test-smoke-metal: metal
$(BUILD_DIR_METAL)/dasheng-audiogen --smoke-test
# Download pre-converted models from HuggingFace (interactive)
.PHONY: download-models
download-models:
@echo ""
@echo "Select model variant to download:"
@echo " 1) F16 - Best quality (~5.7GB)"
@echo " 2) Q8 - Great quality (~3.8GB)"
@echo " 3) Q4 - Good quality (~2.8GB)"
@echo ""
@read -p "Enter choice [1-3]: " choice; \
case $$choice in \
1) $(MAKE) download-models-f16 ;; \
2) $(MAKE) download-models-q8 ;; \
3) $(MAKE) download-models-q4 ;; \
*) echo "Invalid choice. Use: make download-models-f16, download-models-q8, or download-models-q4"; exit 1 ;; \
esac
# F16 models (~5.7GB total) - best quality
.PHONY: download-models-f16
download-models-f16:
@mkdir -p models
@echo "Downloading F16 models (~5.7GB)..."
@$(call hf_download,t5_encoder.gguf dit.gguf vocoder.gguf spiece.model)
@echo "Models downloaded to models/"
@ls -lh models/
# Q8 quantized models (~3.8GB total) - great quality, smaller size
.PHONY: download-models-q8
download-models-q8:
@mkdir -p models
@echo "Downloading Q8 models (~3.8GB)..."
@$(call hf_download,t5_encoder.gguf dit_Q8_0.gguf vocoder.gguf spiece.model)
@mv models/dit_Q8_0.gguf models/dit.gguf 2>/dev/null || true
@echo "Models downloaded to models/"
@ls -lh models/
# Q4 quantized models (~2.8GB total) - good quality, smallest size
.PHONY: download-models-q4
download-models-q4:
@mkdir -p models
@echo "Downloading Q4 models (~2.8GB)..."
@$(call hf_download,t5_encoder.gguf dit_Q4_0.gguf vocoder.gguf spiece.model)
@mv models/dit_Q4_0.gguf models/dit.gguf 2>/dev/null || true
@echo "Models downloaded to models/"
@ls -lh models/
# Helper function for HF download
HF_REPO_URL := https://huggingface.co/audiohacking/dasheng-audiogen-gguf/resolve/main
define hf_download
@if command -v hf >/dev/null 2>&1; then \
for f in $(1); do hf download audiohacking/dasheng-audiogen-gguf $$f --local-dir models/; done; \
elif command -v huggingface-cli >/dev/null 2>&1 && huggingface-cli download --help >/dev/null 2>&1; then \
for f in $(1); do huggingface-cli download audiohacking/dasheng-audiogen-gguf $$f --local-dir models/; done; \
elif command -v curl >/dev/null 2>&1; then \
for f in $(1); do echo "Downloading $$f..."; curl -L -o models/$$f $(HF_REPO_URL)/$$f; done; \
elif command -v wget >/dev/null 2>&1; then \
for f in $(1); do echo "Downloading $$f..."; wget -O models/$$f $(HF_REPO_URL)/$$f; done; \
else \
echo "Error: No download tool found. Install curl, wget, or huggingface_hub[cli]"; \
exit 1; \
fi
endef
# Convert models to GGUF (alternative to downloading)
.PHONY: convert
convert:
@mkdir -p models
@echo "Converting T5 encoder..."
python convert/convert_t5_encoder.py google/flan-t5-large -o models/t5_encoder.gguf --dtype f32
@echo "Converting DiT (F16)..."
python convert/convert_dit.py mispeech/Dasheng-AudioGen -o models/dit.gguf --dtype f16
@echo "Converting Vocoder..."
python convert/convert_vocoder.py mispeech/dashengtokenizer -o models/vocoder.gguf
@echo "Copying sentencepiece model..."
@if [ -f ~/.cache/huggingface/hub/models--google--flan-t5-large/snapshots/*/spiece.model ]; then \
cp ~/.cache/huggingface/hub/models--google--flan-t5-large/snapshots/*/spiece.model models/; \
else \
echo "Note: Run 'huggingface-cli download google/flan-t5-large' to get spiece.model"; \
fi
@echo "Models saved to models/"
@ls -lh models/
# Convert with Q8 quantization
.PHONY: convert-q8
convert-q8:
@mkdir -p models
@echo "Converting T5 encoder..."
python convert/convert_t5_encoder.py google/flan-t5-large -o models/t5_encoder.gguf --dtype f32
@echo "Converting DiT (Q8_0)..."
python convert/convert_dit.py mispeech/Dasheng-AudioGen -o models/dit.gguf --dtype q8_0
@echo "Converting Vocoder..."
python convert/convert_vocoder.py mispeech/dashengtokenizer -o models/vocoder.gguf
@cp ~/.cache/huggingface/hub/models--google--flan-t5-large/snapshots/*/spiece.model models/ 2>/dev/null || true
@ls -lh models/
# Convert with Q4 quantization
.PHONY: convert-q4
convert-q4:
@mkdir -p models
@echo "Converting T5 encoder..."
python convert/convert_t5_encoder.py google/flan-t5-large -o models/t5_encoder.gguf --dtype f32
@echo "Converting DiT (Q4_0)..."
python convert/convert_dit.py mispeech/Dasheng-AudioGen -o models/dit.gguf --dtype q4_0
@echo "Converting Vocoder..."
python convert/convert_vocoder.py mispeech/dashengtokenizer -o models/vocoder.gguf
@cp ~/.cache/huggingface/hub/models--google--flan-t5-large/snapshots/*/spiece.model models/ 2>/dev/null || true
@ls -lh models/
# Quick test run
.PHONY: test-e2e
test-e2e: cpu
$(BUILD_DIR_CPU)/dasheng-audiogen models/t5_encoder.gguf models/dit.gguf models/vocoder.gguf models/spiece.model \
--caption "A dog barking" --steps 10 --output output/test.wav
# Show help
.PHONY: help
help:
@echo "audiogen.cpp build targets:"
@echo ""
@echo "Build:"
@echo " make cpu Build CPU-only version"
@echo " make metal Build with Metal backend (default, macOS)"
@echo " make cuda Build with CUDA backend"
@echo " make build-all Build both CPU and Metal versions"
@echo ""
@echo "Models:"
@echo " make download-models Interactive model selection"
@echo " make download-models-f16 Download F16 models (~5.7GB)"
@echo " make download-models-q8 Download Q8 models (~3.8GB)"
@echo " make download-models-q4 Download Q4 models (~2.8GB)"
@echo " make convert Convert models from original weights (F16)"
@echo " make convert-q8 Convert with Q8 quantization"
@echo " make convert-q4 Convert with Q4 quantization"
@echo ""
@echo "Test:"
@echo " make test-smoke Run smoke test (CPU)"
@echo " make test-smoke-metal Run smoke test (Metal)"
@echo " make test-e2e Run end-to-end test (CPU)"
@echo ""
@echo "Maintenance:"
@echo " make clean Remove all build directories"
@echo " make rebuild Clean and rebuild default target"
@echo ""
@echo "Build outputs:"
@echo " $(BUILD_DIR_CPU)/dasheng-audiogen"
@echo " $(BUILD_DIR_METAL)/dasheng-audiogen"
@echo " $(BUILD_DIR_CUDA)/dasheng-audiogen"