joy

Results 9 comments of joy

> pthread_cond_wait/signal这一对本身用cond锁同步就能睡眠唤醒。 wait的时候需要传入mutex是因为睡眠前需要释放mutex锁,但睡眠之前又不能有无锁的空隙,解决办法是让mutex锁在cond锁上之后再释放。 而signal前不需要释放mutex锁,在持有mutex的情况下signal,之后再释放mutex锁。 睡眠之前有无锁的空隙啊,是把cond锁释放才睡眠的吧。

Thread-A-----------------------------------------------Thread-B pthread_mutex_lock(_mutex---------------------------pthread_mutex_lock(_mutex) pthread_cond_wait(_cond, _mutex)--------------------pthread_cond_siganl(_cond, _mutex) pthread_mutex_unlock(_mutex)------------------------pthread_mutex_unlock(_mutex) 按照文中pthread_cond_timedwait的流程,确实在睡眠前有无锁的空隙呀,如果这个时候Thread-A时间片到了被调度走,此时Thread-B加上mutex锁,进入pthread_cond_siganl再加上cond锁。++cond->__data.__futex; // 修改cond->__data.__futex这个无符号整型 (锁状态变量)然后调用futex_wake,加上自旋锁。然后当Thread-A恢复执行时,在futex_wait中发现锁状态变量已经改变于是直接返回。似乎防止无法唤醒的情况是用hashbucket里面的自旋锁来兜底的呀。

和微调的格式是一样的吗?

> +1。但是没确定出来是什么原因。 仅似乎用chosen数据做SFT,效果能到70. 但是用chosen+rejected数据做DPO,只能到31 差的也太多了 你用的哪个评估集?

lm_head不和embedding一样这样的好处是什么呢?

> comment line 429 `args=args` in `megatron/training.py` will solve this problem. > > ```python > model, optimizer, _, lr_scheduler = deepspeed.initialize( > model=model[0], > optimizer=optimizer, > lr_scheduler=lr_scheduler, > config=config, >...