|
|
#!/bin/bash |
|
|
|
|
|
|
|
|
SPLIT_TOOL=~/git/llama.cpp/build/bin/llama-gguf-split |
|
|
|
|
|
|
|
|
LIMIT_BYTES=42949672960 |
|
|
|
|
|
echo "Starting GGUF splitting for files > 40GB..." |
|
|
echo "----------------------------------------" |
|
|
|
|
|
|
|
|
find . -maxdepth 1 -name "*.gguf" -print0 | while IFS= read -r -d $'\0' FILE; |
|
|
do |
|
|
|
|
|
FILE_NAME=${FILE#./} |
|
|
|
|
|
|
|
|
if [[ "$FILE_NAME" == "Ina-v11.1-F16.gguf" ]]; then |
|
|
echo "Skipping original F16 file: $FILE_NAME" |
|
|
continue |
|
|
fi |
|
|
|
|
|
|
|
|
FILE_SIZE=$(stat -f%z "$FILE_NAME") |
|
|
|
|
|
if [ "$FILE_SIZE" -gt "$LIMIT_BYTES" ]; then |
|
|
echo "Processing: $FILE_NAME (Size: $(numfmt --to=iec-i --suffix=B "$FILE_SIZE"))" |
|
|
|
|
|
|
|
|
DIR_NAME="${FILE_NAME%.gguf}" |
|
|
mkdir -p "$DIR_NAME" |
|
|
|
|
|
echo " Created directory: $DIR_NAME" |
|
|
echo " Splitting '$FILE_NAME' into '$DIR_NAME/'..." |
|
|
|
|
|
|
|
|
pushd "$DIR_NAME" > /dev/null |
|
|
|
|
|
|
|
|
"$SPLIT_TOOL" --split-max-size 40G "../$FILE_NAME" "$(basename "$FILE_NAME" .gguf)" |
|
|
|
|
|
SPLIT_EXIT=$? |
|
|
|
|
|
|
|
|
popd > /dev/null |
|
|
|
|
|
if [ $SPLIT_EXIT -eq 0 ]; then |
|
|
echo "✅ Split successful. Removing original large file: $FILE_NAME" |
|
|
rm "$FILE_NAME" |
|
|
else |
|
|
echo "❌ Splitting failed for $FILE_NAME (Error code: $SPLIT_EXIT). Keeping original file." |
|
|
fi |
|
|
else |
|
|
echo "Skipping $FILE_NAME (Size: $(numfmt --to=iec-i --suffix=B "$FILE_SIZE")) - smaller than 40GB." |
|
|
fi |
|
|
echo "----------------------------------------" |
|
|
done |
|
|
|
|
|
echo "GGUF splitting complete." |
|
|
|