Meta AI Movie-Gen Film: Fri programvare 2026 - Story Outline Tema: En hyllest til norsk open source-kultur. Frihet, fellesskap og natur møter teknologi. Vises gjennom NUUG og den norske vinteren. Overordnet narrativ: Vi følger en norsk utvikler gjennom ett døgn der fri programvare gjør det mulig å skape, samarbeide og være fri - uansett hvor man er. Fra by til fjell, fra dag til natt under nordlyset. Scene 1-4: Oppsummering Morgen i byen: Oppstart på kontor/café. Git commit, første kaffe. "Fri programvare starter dagen" Samarbeid: Pull request fra bidragsyter i Tromsø. Merges over video. "Avstand er ingen hindring" Ettermiddag: Hacking i hackerspace. NUUG-klistremerker, GNU/Linux på skjermene. "Fellesskapet bygger" Kveld: Ut i naturen. Sekken pakkes. "Frihet betyr å kunne jobbe hvor som helst" Scene 5: Fjellet - Hovedscenen vi har laget Setting: Norsk vinterfjell, natt. Utsikt over fjord. Grønt nordlys på himmelen. Handling: Programmereren sitter i snøen og koder. Damp står fra termosen og fra pusten hans. Fotspor viser veien han gikk opp. På skjermen: skarp, lesbar kode + liten NUUG-logo. Han har "GNU • FOSS" og "AI / OPEN SOURCE" patcher på jakka. Norsk flagglue. Budskap: "Fri programvare gir deg friheten til å skape under nordlyset. Norsk natur + global kode." Visuelle nøkkelelementer: Nordlys, fjord, snø, pust, termos, fotspor, NUUG, GNU/FOSS, norsk flagg, synlig kode. Lyddesign: Vind, tastatur, svak ambient drone. Ingen musikk - naturen er lydsporet. Varighet: 8 sekunder. Dette er "hero shot"-et i filmen. Scene 6-8: Forslag til avslutning Morgenrøde: Sola står opp. git push origin main. Koden er delt med verden. Tilbake til fellesskapet: Ny utvikler et annet sted i verden kloner repoet. Sirkelen sluttes. Sluttplakat: "Fri programvare 2026" + NUUG-logo. "Koden er fri. Du er fri."
On Mon, Jul 13, 2026 at 4:11 AM Ole Aamot ole.aamot@gmail.com wrote:
Meta AI Movie-Gen Film: Fri programvare 2026 - Story Outline Tema: En hyllest til norsk open source-kultur. Frihet, fellesskap og natur møter teknologi. Vises gjennom NUUG og den norske vinteren. Overordnet narrativ: Vi følger en norsk utvikler gjennom ett døgn der fri programvare gjør det mulig å skape, samarbeide og være fri - uansett hvor man er. Fra by til fjell, fra dag til natt under nordlyset. Scene 1-4: Oppsummering Morgen i byen: Oppstart på kontor/café. Git commit, første kaffe. "Fri programvare starter dagen" Samarbeid: Pull request fra bidragsyter i Tromsø. Merges over video. "Avstand er ingen hindring" Ettermiddag: Hacking i hackerspace. NUUG-klistremerker, GNU/Linux på skjermene. "Fellesskapet bygger" Kveld: Ut i naturen. Sekken pakkes. "Frihet betyr å kunne jobbe hvor som helst" Scene 5: Fjellet - Hovedscenen vi har laget Setting: Norsk vinterfjell, natt. Utsikt over fjord. Grønt nordlys på himmelen. Handling: Programmereren sitter i snøen og koder. Damp står fra termosen og fra pusten hans. Fotspor viser veien han gikk opp. På skjermen: skarp, lesbar kode + liten NUUG-logo. Han har "GNU • FOSS" og "AI / OPEN SOURCE" patcher på jakka. Norsk flagglue. Budskap: "Fri programvare gir deg friheten til å skape under nordlyset. Norsk natur + global kode." Visuelle nøkkelelementer: Nordlys, fjord, snø, pust, termos, fotspor, NUUG, GNU/FOSS, norsk flagg, synlig kode. Lyddesign: Vind, tastatur, svak ambient drone. Ingen musikk - naturen er lydsporet. Varighet: 8 sekunder. Dette er "hero shot"-et i filmen. Scene 6-8: Forslag til avslutning Morgenrøde: Sola står opp. git push origin main. Koden er delt med verden. Tilbake til fellesskapet: Ny utvikler et annet sted i verden kloner repoet. Sirkelen sluttes. Sluttplakat: "Fri programvare 2026" + NUUG-logo. "Koden er fri. Du er fri."
Helt topp! Da er "Fri programvare 2026" ferdig.
Vi har nå hele historien:
1. Scene 5: Natt under nordlyset - koding på fjellet 2. Scene 6: Soloppgang - git push origin main og fotspor nedover 3. Scene 7: Global deling - koden kjører på andre siden av kloden 4. Sluttplakat: 9:16-versjon for Stories/Reels
Si fra hvis du vil ta opp tråden igjen senere, eller starte på en ny del av prosjektet!
On Mon, Jul 13, 2026 at 4:20 AM Ole Aamot ole.aamot@gmail.com wrote:
On Mon, Jul 13, 2026 at 4:11 AM Ole Aamot ole.aamot@gmail.com wrote:
Meta AI Movie-Gen Film: Fri programvare 2026 - Story Outline Tema: En hyllest til norsk open source-kultur. Frihet, fellesskap og natur møter teknologi. Vises gjennom NUUG og den norske vinteren. Overordnet narrativ: Vi følger en norsk utvikler gjennom ett døgn der fri programvare gjør det mulig å skape, samarbeide og være fri - uansett hvor man er. Fra by til fjell, fra dag til natt under nordlyset. Scene 1-4: Oppsummering Morgen i byen: Oppstart på kontor/café. Git commit, første kaffe. "Fri programvare starter dagen" Samarbeid: Pull request fra bidragsyter i Tromsø. Merges over video. "Avstand er ingen hindring" Ettermiddag: Hacking i hackerspace. NUUG-klistremerker, GNU/Linux på skjermene. "Fellesskapet bygger" Kveld: Ut i naturen. Sekken pakkes. "Frihet betyr å kunne jobbe hvor som helst" Scene 5: Fjellet - Hovedscenen vi har laget Setting: Norsk vinterfjell, natt. Utsikt over fjord. Grønt nordlys på himmelen. Handling: Programmereren sitter i snøen og koder. Damp står fra termosen og fra pusten hans. Fotspor viser veien han gikk opp. På skjermen: skarp, lesbar kode + liten NUUG-logo. Han har "GNU • FOSS" og "AI / OPEN SOURCE" patcher på jakka. Norsk flagglue. Budskap: "Fri programvare gir deg friheten til å skape under nordlyset. Norsk natur + global kode." Visuelle nøkkelelementer: Nordlys, fjord, snø, pust, termos, fotspor, NUUG, GNU/FOSS, norsk flagg, synlig kode. Lyddesign: Vind, tastatur, svak ambient drone. Ingen musikk - naturen er lydsporet. Varighet: 8 sekunder. Dette er "hero shot"-et i filmen. Scene 6-8: Forslag til avslutning Morgenrøde: Sola står opp. git push origin main. Koden er delt med verden. Tilbake til fellesskapet: Ny utvikler et annet sted i verden kloner repoet. Sirkelen sluttes. Sluttplakat: "Fri programvare 2026" + NUUG-logo. "Koden er fri. Du er fri."
#!/usr/bin/env python3 """ training_open_source_ai.py Tren en open source LLM med LoRA/QLoRA på eget datasett.
Støtter: Llama 3, Mistral, Gemma, Qwen, Phi-3 m.fl. Krav: pip install torch transformers datasets peft accelerate bitsandbytes trl """
import argparse import os from dataclasses import dataclass from typing import Optional
import torch from datasets import load_dataset from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training from transformers import ( AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, TrainingArguments, ) from trl import SFTTrainer, SFTConfig
@dataclass class ScriptArguments: model_name: str = "meta-llama/Meta-Llama-3-8B" # eller mistralai/Mistral-7B-v0.3 dataset_name: str = "yahma/alpaca-cleaned" # bytt til ditt datasett dataset_text_field: str = "text" # eller "instruction" + "output" output_dir: str = "./fri_programvare_2026_model" max_seq_length: int = 2048 num_train_epochs: int = 3 per_device_train_batch_size: int = 2 gradient_accumulation_steps: int = 8 learning_rate: float = 2e-4 lr_scheduler_type: str = "cosine" warmup_ratio: float = 0.03 logging_steps: int = 10 save_steps: int = 500 save_total_limit: int = 3 bf16: bool = True use_4bit: bool = True # QLoRA lora_r: int = 64 lora_alpha: int = 16 lora_dropout: float = 0.1 push_to_hub: bool = False hub_model_id: Optional[str] = None
def parse_args(): parser = argparse.ArgumentParser() for field in ScriptArguments.__dataclass_fields__: default = getattr(ScriptArguments, field) parser.add_argument(f"--{field}", type=type(default) if default else str, default=default) return ScriptArguments(**vars(parser.parse_args()))
def format_alpaca(example): """Formater Alpaca-stil datasett til chat-format""" if "input" in example and example["input"]: text = f"### Instruction:\n{example['instruction']}\n\n### Input:\n{example['input']}\n\n### Response:\n{example['output']}" else: text = f"### Instruction:\n{example['instruction']}\n\n### Response:\n{example['output']}" return {"text": text}
def main(): args = parse_args()
# 1. Last tokenizer og modell med 4-bit kvantisering for QLoRA bnb_config = BitsAndBytesConfig( load_in_4bit=args.use_4bit, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16 if args.bf16 else torch.float16, bnb_4bit_use_double_quant=True, )
model = AutoModelForCausalLM.from_pretrained( args.model_name, quantization_config=bnb_config if args.use_4bit else None, device_map="auto", trust_remote_code=True, attn_implementation="flash_attention_2", # krever flash-attn )
tokenizer = AutoTokenizer.from_pretrained(args.model_name, trust_remote_code=True) tokenizer.pad_token = tokenizer.eos_token tokenizer.padding_side = "right"
# 2. Klargjør for QLoRA if args.use_4bit: model = prepare_model_for_kbit_training(model)
peft_config = LoraConfig( r=args.lora_r, lora_alpha=args.lora_alpha, lora_dropout=args.lora_dropout, bias="none", task_type="CAUSAL_LM", target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"], ) model = get_peft_model(model, peft_config) model.print_trainable_parameters()
# 3. Last og formater datasett dataset = load_dataset(args.dataset_name, split="train") if args.dataset_name == "yahma/alpaca-cleaned": dataset = dataset.map(format_alpaca) args.dataset_text_field = "text"
# 4. Treningsargumenter training_args = SFTConfig( output_dir=args.output_dir, num_train_epochs=args.num_train_epochs, per_device_train_batch_size=args.per_device_train_batch_size, gradient_accumulation_steps=args.gradient_accumulation_steps, optim="paged_adamw_32bit", logging_steps=args.logging_steps, save_strategy="steps", save_steps=args.save_steps, save_total_limit=args.save_total_limit, learning_rate=args.learning_rate, bf16=args.bf16, fp16=not args.bf16, lr_scheduler_type=args.lr_scheduler_type, warmup_ratio=args.warmup_ratio, group_by_length=True, report_to="tensorboard", max_seq_length=args.max_seq_length, dataset_text_field=args.dataset_text_field, packing=True, # Pakk flere korte sekvenser sammen )
# 5. Trainer trainer = SFTTrainer( model=model, tokenizer=tokenizer, train_dataset=dataset, args=training_args, peft_config=peft_config, )
# 6. Kjør trening print("Starter trening for Fri programvare 2026 🚀") trainer.train()
# 7. Lagre trainer.save_model(args.output_dir) tokenizer.save_pretrained(args.output_dir) print(f"Modell lagret til {args.output_dir}")
# 8. Valgfritt: push til HF Hub if args.push_to_hub and args.hub_model_id: trainer.push_to_hub(args.hub_model_id) print(f"Pushet til https://huggingface.co/%7Bargs.hub_model_id%7D")
if __name__ == "__main__": main()
On Mon, Jul 13, 2026 at 4:26 AM Ole Aamot ole.aamot@gmail.com wrote:
Helt topp! Da er "Fri programvare 2026" ferdig.
Vi har nå hele historien:
- Scene 5: Natt under nordlyset - koding på fjellet
- Scene 6: Soloppgang - git push origin main og fotspor nedover
- Scene 7: Global deling - koden kjører på andre siden av kloden
- Sluttplakat: 9:16-versjon for Stories/Reels
Si fra hvis du vil ta opp tråden igjen senere, eller starte på en ny del av prosjektet!
On Mon, Jul 13, 2026 at 4:20 AM Ole Aamot ole.aamot@gmail.com wrote:
On Mon, Jul 13, 2026 at 4:11 AM Ole Aamot ole.aamot@gmail.com wrote:
Meta AI Movie-Gen Film: Fri programvare 2026 - Story Outline Tema: En hyllest til norsk open source-kultur. Frihet, fellesskap og natur møter teknologi. Vises gjennom NUUG og den norske vinteren. Overordnet narrativ: Vi følger en norsk utvikler gjennom ett døgn der fri programvare gjør det mulig å skape, samarbeide og være fri - uansett hvor man er. Fra by til fjell, fra dag til natt under nordlyset. Scene 1-4: Oppsummering Morgen i byen: Oppstart på kontor/café. Git commit, første kaffe. "Fri programvare starter dagen" Samarbeid: Pull request fra bidragsyter i Tromsø. Merges over video. "Avstand er ingen hindring" Ettermiddag: Hacking i hackerspace. NUUG-klistremerker, GNU/Linux på skjermene. "Fellesskapet bygger" Kveld: Ut i naturen. Sekken pakkes. "Frihet betyr å kunne jobbe hvor som helst" Scene 5: Fjellet - Hovedscenen vi har laget Setting: Norsk vinterfjell, natt. Utsikt over fjord. Grønt nordlys på himmelen. Handling: Programmereren sitter i snøen og koder. Damp står fra termosen og fra pusten hans. Fotspor viser veien han gikk opp. På skjermen: skarp, lesbar kode + liten NUUG-logo. Han har "GNU • FOSS" og "AI / OPEN SOURCE" patcher på jakka. Norsk flagglue. Budskap: "Fri programvare gir deg friheten til å skape under nordlyset. Norsk natur + global kode." Visuelle nøkkelelementer: Nordlys, fjord, snø, pust, termos, fotspor, NUUG, GNU/FOSS, norsk flagg, synlig kode. Lyddesign: Vind, tastatur, svak ambient drone. Ingen musikk - naturen er lydsporet. Varighet: 8 sekunder. Dette er "hero shot"-et i filmen. Scene 6-8: Forslag til avslutning Morgenrøde: Sola står opp. git push origin main. Koden er delt med verden. Tilbake til fellesskapet: Ny utvikler et annet sted i verden kloner repoet. Sirkelen sluttes. Sluttplakat: "Fri programvare 2026" + NUUG-logo. "Koden er fri. Du er fri."
#!/usr/bin/env python3 """ training_open_source_ai.py Tren en open source LLM med LoRA/QLoRA på eget datasett.
Støtter: Llama 3, Mistral, Gemma, Qwen, Phi-3 m.fl. Krav: pip install torch transformers datasets peft accelerate bitsandbytes trl """
import argparse import os from dataclasses import dataclass from typing import Optional
import torch from datasets import load_dataset from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training from transformers import ( AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, TrainingArguments, ) from trl import SFTTrainer, SFTConfig
@dataclass class ScriptArguments: model_name: str = "meta-llama/Meta-Llama-3-8B" # eller mistralai/Mistral-7B-v0.3 dataset_name: str = "yahma/alpaca-cleaned" # bytt til ditt datasett dataset_text_field: str = "text" # eller "instruction" + "output" output_dir: str = "./fri_programvare_2026_model" max_seq_length: int = 2048 num_train_epochs: int = 3 per_device_train_batch_size: int = 2 gradient_accumulation_steps: int = 8 learning_rate: float = 2e-4 lr_scheduler_type: str = "cosine" warmup_ratio: float = 0.03 logging_steps: int = 10 save_steps: int = 500 save_total_limit: int = 3 bf16: bool = True use_4bit: bool = True # QLoRA lora_r: int = 64 lora_alpha: int = 16 lora_dropout: float = 0.1 push_to_hub: bool = False hub_model_id: Optional[str] = None
def parse_args(): parser = argparse.ArgumentParser() for field in ScriptArguments.__dataclass_fields__: default = getattr(ScriptArguments, field) parser.add_argument(f"--{field}", type=type(default) if default else str, default=default) return ScriptArguments(**vars(parser.parse_args()))
def format_alpaca(example): """Formater Alpaca-stil datasett til chat-format""" if "input" in example and example["input"]: text = f"### Instruction:\n{example['instruction']}\n\n### Input:\n{example['input']}\n\n### Response:\n{example['output']}" else: text = f"### Instruction:\n{example['instruction']}\n\n### Response:\n{example['output']}" return {"text": text}
def main(): args = parse_args()
# 1. Last tokenizer og modell med 4-bit kvantisering for QLoRA bnb_config = BitsAndBytesConfig( load_in_4bit=args.use_4bit, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16 if args.bf16 else torch.float16, bnb_4bit_use_double_quant=True, )
model = AutoModelForCausalLM.from_pretrained( args.model_name, quantization_config=bnb_config if args.use_4bit else None, device_map="auto", trust_remote_code=True, attn_implementation="flash_attention_2", # krever flash-attn )
tokenizer = AutoTokenizer.from_pretrained(args.model_name, trust_remote_code=True) tokenizer.pad_token = tokenizer.eos_token tokenizer.padding_side = "right"
# 2. Klargjør for QLoRA if args.use_4bit: model = prepare_model_for_kbit_training(model)
peft_config = LoraConfig( r=args.lora_r, lora_alpha=args.lora_alpha, lora_dropout=args.lora_dropout, bias="none", task_type="CAUSAL_LM", target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"], ) model = get_peft_model(model, peft_config) model.print_trainable_parameters()
# 3. Last og formater datasett dataset = load_dataset(args.dataset_name, split="train") if args.dataset_name == "yahma/alpaca-cleaned": dataset = dataset.map(format_alpaca) args.dataset_text_field = "text"
# 4. Treningsargumenter training_args = SFTConfig( output_dir=args.output_dir, num_train_epochs=args.num_train_epochs, per_device_train_batch_size=args.per_device_train_batch_size, gradient_accumulation_steps=args.gradient_accumulation_steps, optim="paged_adamw_32bit", logging_steps=args.logging_steps, save_strategy="steps", save_steps=args.save_steps, save_total_limit=args.save_total_limit, learning_rate=args.learning_rate, bf16=args.bf16, fp16=not args.bf16, lr_scheduler_type=args.lr_scheduler_type, warmup_ratio=args.warmup_ratio, group_by_length=True, report_to="tensorboard", max_seq_length=args.max_seq_length, dataset_text_field=args.dataset_text_field, packing=True, # Pakk flere korte sekvenser sammen )
# 5. Trainer trainer = SFTTrainer( model=model, tokenizer=tokenizer, train_dataset=dataset, args=training_args, peft_config=peft_config, )
# 6. Kjør trening print("Starter trening for Fri programvare 2026 🚀") trainer.train()
# 7. Lagre trainer.save_model(args.output_dir) tokenizer.save_pretrained(args.output_dir) print(f"Modell lagret til {args.output_dir}")
# 8. Valgfritt: push til HF Hub if args.push_to_hub and args.hub_model_id: trainer.push_to_hub(args.hub_model_id) print(f"Pushet til https://huggingface.co/%7Bargs.hub_model_id%7D")
if __name__ == "__main__": main() Hvordan bruke det
1. Installer dependencies: Bash
2. Kjør med standard Llama-3-8B på Alpaca: Bash
3. Bruk eget datasett i JSONL-format: JSON TreeRaw
- ▶{ - "instruction":"Hva er fri programvare?", - "input":"", - "output":"Fri programvare gir brukeren frihet til å..." }
Bash
4. For Mistral eller Gemma: Bash
Viktige detaljer:
- QLoRA: Bruker 4-bit + LoRA så du kan trene 8B-modeller på 24GB VRAM - Packing: Slår sammen korte eksempler for raskere trening - Flash Attention 2: 2-3x raskere hvis du har flash-attn installert - output_dir: Her havner LoRA-adapteren. Merge den med base-modellen etterpå hvis du vil
Vil du at jeg legger til støtte for DPO/ORPO, eller lager en merge_lora.py for å bake vektene inn?
On Mon, Jul 13, 2026 at 4:26 AM Ole Aamot ole.aamot@gmail.com wrote:
Helt topp! Da er "Fri programvare 2026" ferdig.
Vi har nå hele historien:
- Scene 5: Natt under nordlyset - koding på fjellet
- Scene 6: Soloppgang - git push origin main og fotspor nedover
- Scene 7: Global deling - koden kjører på andre siden av kloden
- Sluttplakat: 9:16-versjon for Stories/Reels
Si fra hvis du vil ta opp tråden igjen senere, eller starte på en ny del av prosjektet!
On Mon, Jul 13, 2026 at 4:20 AM Ole Aamot ole.aamot@gmail.com wrote:
On Mon, Jul 13, 2026 at 4:11 AM Ole Aamot ole.aamot@gmail.com wrote:
Meta AI Movie-Gen Film: Fri programvare 2026 - Story Outline Tema: En hyllest til norsk open source-kultur. Frihet, fellesskap og natur møter teknologi. Vises gjennom NUUG og den norske vinteren. Overordnet narrativ: Vi følger en norsk utvikler gjennom ett døgn der fri programvare gjør det mulig å skape, samarbeide og være fri - uansett hvor man er. Fra by til fjell, fra dag til natt under nordlyset. Scene 1-4: Oppsummering Morgen i byen: Oppstart på kontor/café. Git commit, første kaffe. "Fri programvare starter dagen" Samarbeid: Pull request fra bidragsyter i Tromsø. Merges over video. "Avstand er ingen hindring" Ettermiddag: Hacking i hackerspace. NUUG-klistremerker, GNU/Linux på skjermene. "Fellesskapet bygger" Kveld: Ut i naturen. Sekken pakkes. "Frihet betyr å kunne jobbe hvor som helst" Scene 5: Fjellet - Hovedscenen vi har laget Setting: Norsk vinterfjell, natt. Utsikt over fjord. Grønt nordlys på himmelen. Handling: Programmereren sitter i snøen og koder. Damp står fra termosen og fra pusten hans. Fotspor viser veien han gikk opp. På skjermen: skarp, lesbar kode + liten NUUG-logo. Han har "GNU • FOSS" og "AI / OPEN SOURCE" patcher på jakka. Norsk flagglue. Budskap: "Fri programvare gir deg friheten til å skape under nordlyset. Norsk natur + global kode." Visuelle nøkkelelementer: Nordlys, fjord, snø, pust, termos, fotspor, NUUG, GNU/FOSS, norsk flagg, synlig kode. Lyddesign: Vind, tastatur, svak ambient drone. Ingen musikk - naturen er lydsporet. Varighet: 8 sekunder. Dette er "hero shot"-et i filmen. Scene 6-8: Forslag til avslutning Morgenrøde: Sola står opp. git push origin main. Koden er delt med verden. Tilbake til fellesskapet: Ny utvikler et annet sted i verden kloner repoet. Sirkelen sluttes. Sluttplakat: "Fri programvare 2026" + NUUG-logo. "Koden er fri. Du er fri."