Demonstrationen ägde rum i staden Ilave, vid Titicacasjön i södra Peru.
Enligt Perus försvarsdepartement blev en grupp soldater konfronterade av en mycket större grupp demonstranter som hade slangbellor och käppar. De tvingades fly ned i den kalla floden, enligt soldater som uttalar sig via myndigheternas kanaler.
De demonstrerande invånarna i Ilave motsatte sig till en början soldaternas närvaro, men hjälpte sedan flera av dem när det stod klart att de hade hamnat i fara i floden, berättar vittnen på plats för nyhetsbyrån EFE.
General Jhonny León Rabanal, högsta militära befäl i södra Peru, beskriver dödsfallen som mord.
– Det är inte som att befälet beordrar dem att gå ned i floden för att drunkna. De blev attackerade, säger han.
Det har rått stora oroligheter i Peru sedan mitten av december, då den förre presidenten Pedro Castillo avsattes och greps. Demonstranterna kräver att den nya presidenten Dina Boluarte avgår, att nyval utlyses samt att grundlagen skrivs om.
I regionen Puno, där Ilave ligger, har det utlysts undantagstillstånd och militären har satts in för att upprätthålla ordningen. Vid demonstrationer i grannstaden Juliaca har 18 personer dödats.