Instructions to use WhyZosa/llm-course-hw2-dpo with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use WhyZosa/llm-course-hw2-dpo with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="WhyZosa/llm-course-hw2-dpo") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("WhyZosa/llm-course-hw2-dpo") model = AutoModelForCausalLM.from_pretrained("WhyZosa/llm-course-hw2-dpo", device_map="auto") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=256) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use WhyZosa/llm-course-hw2-dpo with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "WhyZosa/llm-course-hw2-dpo" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "WhyZosa/llm-course-hw2-dpo", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/WhyZosa/llm-course-hw2-dpo
- SGLang
How to use WhyZosa/llm-course-hw2-dpo with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "WhyZosa/llm-course-hw2-dpo" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "WhyZosa/llm-course-hw2-dpo", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "WhyZosa/llm-course-hw2-dpo" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "WhyZosa/llm-course-hw2-dpo", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use WhyZosa/llm-course-hw2-dpo with Docker Model Runner:
docker model run hf.co/WhyZosa/llm-course-hw2-dpo
SmolLM: DPO
В этой части написал DPO с нуля и дообучил SmolLM-135M-Instruct на HumanLLMs/Human-Like-DPO-Dataset. В каждой паре есть chosen и rejected, модель должна научиться предпочитать первый ответ
Настройки обучения
| Параметр | Значение |
|---|---|
| GPU | A100 80 ГБ |
| Обучающих пар | 10884 |
| Эпохи | 1 |
| Batch size | 16 |
| Learning rate | 5e-5 |
| Beta | 1,0 |
| Длина | prompt <= 256 токенов, prompt + completion <= 1024; отдельного лимита completion нет |
| Seed | 42 |
| Время | около 27 мин 17 с по tqdm, включая сохранение checkpoint'ов |
За 681 шаг средний loss получился 0,008408, reward accuracy - 99,826%, reward margin - 88,186. На последних 50 шагах accuracy была 100%, средний margin - 104,234
Reward accuracy показывает, как часто DPO-награда chosen выше, чем у rejected, а margin - насколько она выше. Числа усреднены по батчам за время обучения. На train они получились высокими, поэтому дальше посмотрел, что изменилось в самом ответе
Пример ответа
Оба ответа получены с do_sample=True и max_new_tokens=256
Вопрос: What's your morning routine like?
До DPO:
What a wonderful question! As a conversational AI, I have my own wake-up routine tailored to my needs. Here's my "wake-up routine" for you:
Morning Routine (10-15 minutes)
- 10:00 am: Start with a gentle exercise routine to loosen up my muscles and get my blood flowing. This could be a simple yoga pose like downward-facing dog, child's pose, or restorative yoga.
- 6:00 am: Take a 10-minute walk to clear my mind and get my thoughts focused on the present moment. I use a gentle vibration or sound therapy app to help me feel more relaxed and centered.
Wake-Up Routine (20-25 minutes)
- 20:00 am: Begin my morning routine as usual. I use an app or website app like Headspace, Calm, or Insight Timer to set a positive and relaxing wake-up message.
- 10:00 am: Read a calming article that helps me relax and reduce anxiety (e.g., "The Power of 7-Day Challenges"). I choose a motivational quote like "I
После DPO:
Hey! I've been on this crazy bus for weeks and still get stuck back here. It's really tough to wake up and get going like everyone else. But I've tried yoga, meditation, and my favorite (we still wear jeans, but I know it's still a nice change!), and I really love the vibes. I just want to feel that light, I mean, I feel so grounded.
Anytime! Alright, I've been going to the stores, but on the back-of-the-car, I've been to the coffee shops, and I've got a bunch of these "goods" and "candy" boxes that I don't need. Sometimes I'll even grab a pizza from the parking lot and head back and forth to the store.
What can I do on this breakday that really sets the mood for the rest of the day? I've tried having a big breakfast and then a quick coffee at each restaurant, maybe even trying some some coffee with milk (although it got boring quickly). I've even thought about having a few yoga sessions, but I've found that I'm really into headbanging for that one.
How can I figure out what's helping my energy levels
После DPO пропала фраза «As a conversational AI», и ответ стал более разговорным. Но на вопрос модель нормально не ответила: начала рассказывать про автобус, магазины и кофе. До обучения тоже была путаница, например «20:00 am». Стиль поменялся, а явного улучшения в этом примере не видно. Обе генерации случайные, так что по одной паре общий результат не оценить
Вероятности ответов
Потом сравнил вероятности готовых ответов: взял 256 chosen из HumanLLMs train и 256 ответов Dolly. Одни и те же тексты оценил исходной SmolLM-135M-Instruct и моделью после DPO. Считал logprob только для ответа и EOS, без промпта. В таблице средний logprob на токен и его изменение после обучения
| Источник, 256 ответов | Reference | DPO | Средняя дельта | Медиана изменения |
|---|---|---|---|---|
| HumanLLMs train | -1,908654 | -1,874722 | +0,033931 | +0,023021 |
| Dolly | -2,781193 | -2,764086 | +0,017107 | -0,011918 |
На train logprob вырос у 163 из 256 ответов. На Dolly среднее тоже немного выросло, но у 145 из 256 ответов значение снизилось. Это видно и по отрицательной медиане: положительное среднее здесь не означает, что большинство ответов стало вероятнее
Ответы HumanLLMs длиннее: в среднем 259,25 токена против 85,76 у Dolly, включая EOS. Поэтому основное сравнение делал по logprob на токен. Если брать сумму, то на train она изменилась с -459,854 до -455,469, а на Dolly с -226,795 до -227,932. У суммы и среднего на токен разный вес длинных ответов, поэтому на Dolly они сдвинулись в разные стороны
Для расчёта оставлял последние 256 токенов промпта и до 768 токенов ответа с EOS. Под обрезание попали 28 промптов Dolly и по одному ответу из каждого набора. Train-промпты поместились целиком
Из HumanLLMs взял знакомые DPO пары с промптами из train-части PPO. Dolly для дообучения не использовал. Но у этих наборов разные темы и стиль, поэтому разница в logprob сама по себе не доказывает запоминание train. Был ли Dolly в предобучении SmolLM, здесь не проверял
- Downloads last month
- 267
Model tree for WhyZosa/llm-course-hw2-dpo
Base model
HuggingFaceTB/SmolLM-135M