diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0fea4f7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.venv/ +.cache/ diff --git a/README.md b/README.md index 2a249f6..3819c34 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,11 @@ # TFM Test TFM remote execution on upc server + +## TODO: + +- Alguna cosa legal per carregar models i fer benchmarking potser +- Mirar de com implementar la cosa de busqueda de tensors +- Reemplaçarlos allà +- Fer posttraining +- Profit diff --git a/benchmark.sh b/benchmark.sh new file mode 100644 index 0000000..1db6326 --- /dev/null +++ b/benchmark.sh @@ -0,0 +1,6 @@ +#!/bin/bash +lm_eval + --model hf \ + --model_args pretrained=~/Uni/tfm/qwen_random,dtype=bfloat16,device_mp=auto \ + --tasks hellaswag,arc_easy,boolq \ + --batch_size auto diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..b8352ca --- /dev/null +++ b/requirements.txt @@ -0,0 +1,101 @@ +absl-py==2.4.0 +accelerate==1.13.0 +aiohappyeyeballs==2.6.2 +aiohttp==3.14.1 +aiosignal==1.4.0 +annotated-doc==0.0.4 +anyio==4.13.0 +attrs==26.1.0 +certifi==2026.5.20 +chardet==6.0.0.post1 +charset-normalizer==3.4.7 +click==8.4.1 +colorama==0.4.6 +cuda-bindings==13.3.1 +cuda-pathfinder==1.5.5 +cuda-toolkit==13.0.2 +DataProperty==1.1.1 +datasets==5.0.0 +dill==0.4.1 +evaluate==0.4.6 +filelock==3.29.1 +frozenlist==1.8.0 +fsspec==2026.4.0 +h11==0.16.0 +hf-xet==1.5.1 +httpcore==1.0.9 +httpx==0.28.1 +huggingface_hub==1.18.0 +idna==3.18 +Jinja2==3.1.6 +joblib==1.5.3 +lm_eval==0.4.12 +lxml==6.1.1 +markdown-it-py==4.2.0 +MarkupSafe==3.0.3 +mbstrdecoder==1.1.5 +mdurl==0.1.2 +more-itertools==11.1.0 +mpmath==1.3.0 +multidict==6.7.1 +multiprocess==0.70.19 +narwhals==2.22.1 +networkx==3.6.1 +nltk==3.9.4 +numpy==2.4.6 +nvidia-cublas==13.1.1.3 +nvidia-cuda-cupti==13.0.85 +nvidia-cuda-nvrtc==13.0.88 +nvidia-cuda-runtime==13.0.96 +nvidia-cudnn-cu13==9.20.0.48 +nvidia-cufft==12.0.0.61 +nvidia-cufile==1.15.1.6 +nvidia-curand==10.4.0.35 +nvidia-cusolver==12.0.4.66 +nvidia-cusparse==12.6.3.3 +nvidia-cusparselt-cu13==0.8.1 +nvidia-nccl-cu13==2.29.7 +nvidia-nvjitlink==13.0.88 +nvidia-nvshmem-cu13==3.4.5 +nvidia-nvtx==13.0.85 +packaging==26.2 +pandas==3.0.3 +pathvalidate==3.3.1 +portalocker==3.2.0 +propcache==0.5.2 +psutil==7.2.2 +pyarrow==24.0.0 +Pygments==2.20.0 +pytablewriter==1.2.1 +python-dateutil==2.9.0.post0 +pytz==2026.2 +PyYAML==6.0.3 +regex==2026.5.9 +requests==2.34.2 +rich==15.0.0 +rouge_score==0.1.2 +sacrebleu==2.6.0 +safetensors==0.8.0 +scikit-learn==1.9.0 +scipy==1.17.1 +setuptools==81.0.0 +shellingham==1.5.4 +six==1.17.0 +sqlitedict==2.1.0 +sympy==1.14.0 +tabledata==1.3.5 +tabulate==0.10.0 +tcolorpy==0.1.7 +threadpoolctl==3.6.0 +tokenizers==0.22.2 +torch==2.12.0 +tqdm==4.68.2 +transformers==5.10.2 +triton==3.7.0 +typepy==1.3.5 +typer==0.25.1 +typing_extensions==4.15.0 +urllib3==2.7.0 +word2number==1.1 +xxhash==3.7.0 +yarl==1.24.2 diff --git a/test.py b/test.py new file mode 100644 index 0000000..bedaecb --- /dev/null +++ b/test.py @@ -0,0 +1,65 @@ +import torch +import torch.nn as nn +from transformers import AutoTokenizer, AutoModelForCausalLM + +model_id = "Qwen/Qwen3.5-0.8B" +cache_path = "./.cache" + +# Load tokenizer + model +tokenizer = AutoTokenizer.from_pretrained(model_id, cache_dir=cache_path) + +model = AutoModelForCausalLM.from_pretrained( + model_id, + torch_dtype=torch.bfloat16, + device_map="auto", + cache_dir=cache_path, +) + +model.eval() +print(model) + +# ----------------------------- +# 1. Replace ALL linear layers +# ----------------------------- +def replace_weights_with_random(module): + for name, child in module.named_children(): + + # If it's a Linear layer, replace weights + if isinstance(child, nn.Linear): + with torch.no_grad(): + child.weight.copy_( + torch.randn_like(child.weight) + ) + if child.bias is not None: + child.bias.copy_( + torch.randn_like(child.bias) + ) + + else: + # recurse into submodules + replace_weights_with_random(child) + +replace_weights_with_random(model) + +print("All linear layer weights replaced with random tensors.") + +# ----------------------------- +# 2. Run inference +# ----------------------------- +prompt = "Explain tensor networks in simple terms." + +inputs = tokenizer(prompt, return_tensors="pt").to(model.device) + +with torch.no_grad(): + output = model.generate( + **inputs, + max_new_tokens=500, + temperature=1.0, + do_sample=True + ) + +print("\n=== OUTPUT ===\n") +print(tokenizer.decode(output[0], skip_special_tokens=True)) + +model.save_pretrained("./.cache/qwen_random") +tokenizer.save_pretrained("./.cache/qwen_random")