Download src/test_visual_preference.py from hassanql/road-visual-preference-fit: direct link, hf CLI and curl.
- Browser
- Download file 1.64 kB
-
https://huggingface.co/hassanql/road-visual-preference-fit/resolve/main/src/test_visual_preference.py
- Command line
-
hf download hf://hassanql/road-visual-preference-fit/src/test_visual_preference.py
-
curl -L -o test_visual_preference.py https://huggingface.co/hassanql/road-visual-preference-fit/resolve/main/src/test_visual_preference.py
1.64 kB
| """GPU-host tests; local execution requires torch, not installed by this test.""" | |
| import sys | |
| from pathlib import Path | |
| import unittest | |
| sys.path.insert(0,str(Path(__file__).resolve().parents[1]/'src')) | |
| import torch | |
| from visual_preference import sequence_logps,anchored_loss | |
| class Preference(unittest.TestCase): | |
| def test_completion_mask_and_shift(self): | |
| logits=torch.zeros(1,4,3,requires_grad=True) | |
| labels=torch.tensor([[-100,-100,1,2]]) | |
| lp=sequence_logps(logits,labels) | |
| self.assertAlmostEqual(float(lp[0]),-1.098612288,places=6) | |
| (-lp.mean()).backward() | |
| self.assertEqual(float(logits.grad[0,0].abs().sum()),0.) | |
| self.assertGreater(float(logits.grad[0,1].abs().sum()),0.) | |
| self.assertGreater(float(logits.grad[0,2].abs().sum()),0.) | |
| self.assertEqual(float(logits.grad[0,3].abs().sum()),0.) | |
| def test_preference_gradient_direction(self): | |
| good=torch.tensor([-.7],requires_grad=True);bad=torch.tensor([-1.],requires_grad=True) | |
| loss,_,_=anchored_loss(good,bad,torch.ones(1));loss.backward() | |
| self.assertLess(float(good.grad[0]),0.) | |
| self.assertGreater(float(bad.grad[0]),0.) | |
| def test_ineligible_pairs_have_only_sft_gradient(self): | |
| good=torch.tensor([-1.],requires_grad=True);bad=torch.tensor([-1.],requires_grad=True) | |
| loss,_,_=anchored_loss(good,bad,torch.zeros(1));loss.backward() | |
| self.assertAlmostEqual(float(loss),1.) | |
| self.assertEqual(float(bad.grad[0]),0.) | |
| def test_length_normalization(self): | |
| logits=torch.zeros(2,4,3) | |
| labels=torch.tensor([[-100,1,2,-100],[-100,1,2,1]]) | |
| self.assertTrue(torch.allclose(sequence_logps(logits,labels),torch.full((2,),-1.098612288))) | |
| if __name__=='__main__':unittest.main() | |