Faits :
A.
Par jugement du 20 juillet 2016, la Chambre patrimoniale cantonale du canton de Vaud a rejeté les conclusions prises par A._ contre l'hoirie de feue B._, composée de C._ et D._.
A._ a interjeté un appel contre ce jugement, concluant principalement à sa réforme en ce sens que l'hoirie de feue B._ soit condamnée à lui verser la somme de 1'550'000 fr. avec intérêts à 5% l'an dès le 19 novembre 2008 et la somme de 8'450 fr. avec intérêts à 5% l'an dès le 27 août 2009.
Invité à s'acquitter d'une avance de frais d'appel à hauteur de 16'584 fr. jusqu'au 14 octobre 2016, A._ a requis ce jour-là l'assistance judiciaire, limitée à l'exonération de l'avance de frais. Par décision du 3 novembre 2016, la Juge déléguée de la Cour d'appel civile du canton de Vaud a rejeté la requête.
Le 14 décembre 2016, A._ a demandé la réduction en équité de l'avance de frais, subsidiairement l'autorisation de s'acquitter de celle-ci par mensualités.
Le 20 décembre 2016, la Juge déléguée a autorisé A._ à s'acquitter de l'avance de frais de 16'584 fr. en sept mensualités de 2'000 fr. et une mensualité de 2'584 fr., à payer le dernier jour de chaque mois entre décembre 2016 et juillet 2017.
Les cinq premiers acomptes ont été versés aux échéances fixées, sauf le deuxième qui est intervenu dans le délai supplémentaire de cinq jours imparti par la cour cantonale.
A._ ne s'est pas acquitté de la sixième mensualité à l'échéance du 31 mai 2017. Le 6 juin 2017, il a demandé à pouvoir payer le solde encore dû de 6'584 fr. par acomptes mensuels de 1'000 fr. Le 7 juin 2017, la Juge déléguée a refusé de revenir sur les modalités de paiement fixées le 20 décembre 2016. Par avis du 20 juin 2017 notifié deux jours plus tard, elle a imparti à A._ un délai supplémentaire non prolongeable de cinq jours dès réception pour verser le sixième acompte de 2'000 fr., faute de quoi il ne serait pas entré en matière sur l'appel.
A._ a payé sur le compte de la cour cantonale un montant de 2'000 fr. le 10 juillet 2017 et la même somme le lendemain.
B.
Par arrêt du 17 juillet 2017, la Cour d'appel civile, par sa Juge déléguée, a déclaré l'appel irrecevable en application de l'<ref-law>.
Par lettre du 31 juillet 2017 adressée à la Juge déléguée, A._ a fait "opposition totale" à l'arrêt précité. Il rappelait dans ce courrier la situation financière précaire qui l'avait conduit à demander le 6 juin 2017 un nouvel échelonnement pour le règlement de l'avance et prétendait n'avoir jamais reçu de réponse. Par ailleurs, il exposait qu'il avait eu un accident le 20 juin 2017 et était sorti de l'hôpital le 10 juillet 2017, qu'il avait obtenu dans l'intervalle un prêt de 6'000 fr. de la part d'un ami et qu'il avait ainsi pu régler les deux derniers acomptes de 2'000 fr. dès sa sortie de l'hôpital, de même que le solde de 2'584 fr. le 25 juillet 2017. Arguant qu'il avait finalement payé la totalité de l'avance de frais à la dernière échéance fixée au 31 juillet 2017, A._ demandait à la Juge déléguée de revoir sa décision.
Par communication du 4 août 2017, la Juge déléguée a refusé de revoir la décision d'irrecevabilité, dès lors que les mensualités dues étaient connues depuis décembre 2016 et que l'avis du 20 juin 2017 était clair quant aux conséquences d'un non-paiement de l'acompte dans le délai prolongé; elle invitait A._ à s'adresser, cas échéant, à l'autorité supérieure.
C.
A._ interjette un recours en matière civile. Il demande au Tribunal fédéral d'annuler l'arrêt du 17 juillet 2017 et de renvoyer la cause à l'autorité cantonale pour qu'il soit entré en matière sur le fond de la cause et procédé en conséquence.
Par ailleurs, le recourant sollicite d'être mis au bénéfice de l'assistance judiciaire. Sur demande, il a fourni à la cour de céans les renseignements et pièces nécessaires à cet égard (<ref-law>).
L'hoirie de feue B._ a déposé une requête de sûretés en garantie des dépens.

Considérant en droit :
1.
Le Tribunal fédéral examine d'office sa compétence (<ref-law>). Il contrôle librement la recevabilité des recours qui lui sont soumis (<ref-ruling> consid. 1 p. 143; <ref-ruling> consid. 2.1 p. 397).
1.1. Dans son mémoire, le recourant expose qu'en raison d'une fracture du pied survenue le 20 juin 2017, il a été empêché sans sa faute de respecter l'ultime délai imparti pour payer le sixième acompte de l'avance de frais, venant à échéance le 27 juin 2017. Il produit plusieurs certificats médicaux.
Plus loin, le recourant fait valoir que son courrier du 31 juillet 2017 constitue une requête en relevé du défaut intervenue dans le délai prévu à l'<ref-law>. L'autorité cantonale aurait dès lors violé l'<ref-law> en rejetant cette requête dans sa communication du 4 août 2017 et en le renvoyant à agir par le recours en matière civile. Elle aurait également violé le droit d'être entendu de l'hoirie (<ref-law>) et du recourant, qui n'a pas pu s'exprimer sur les causes de son défaut.
1.2. Le recours est dirigé contre l'arrêt cantonal du 17 juillet 2017.
Aux termes de l'<ref-law>, aucun fait ni preuve nouvelle ne peut être présenté à moins de résulter de la décision de l'autorité précédente. Le recours est dès lors irrecevable dans la mesure où il se fonde sur des éléments postérieurs au prononcé de l'arrêt entrepris, soit le courrier du recourant du 31 juillet 2017 et la réponse de la Juge déléguée du 4 août 2017.
1.3. Le recours en matière civile est recevable contre les décisions prises par les autorités cantonales de dernière instance (<ref-law>). Cette disposition repose sur le principe de l'épuisement des instances cantonales, qui implique que les griefs soulevés devant le Tribunal fédéral ne soient pas susceptibles d'une voie de droit cantonale (<ref-ruling> consid. 1.1 p. 290; <ref-ruling> consid. 2.1 p. 131 et l'arrêt cité).
Lorsque les griefs soulevés par l'auteur du recours tendent à démontrer qu'il s'est trouvé sans sa faute dans l'incapacité de respecter le délai pour l'avance de frais, le recours immédiat au Tribunal fédéral contre la décision d'irrecevabilité en raison du non-paiement de l'avance est irrecevable; il incombe en effet au recourant de saisir au préalable l'autorité qui a rendu la décision d'irrecevabilité d'une demande de restitution du délai (cf. arrêts 2C_735/2012 du 25 mars 2013 consid. 1.4.1, 2C_845/2011 du 17 octobre 2011 consid. 2; JEAN-MAURICE FRÉSARD, in Commentaire de la LTF, 2 e éd. 2014, n° 19a ad <ref-law>; cf. également arrêt 5A_654/2015 du 22 décembre 2015 consid. 5.4 in fine).
Comme l'<ref-law> le prévoit expressément, l'autorité cantonale n'est pas entrée en matière sur la demande du recourant parce que le sixième acompte de l'avance de frais n'a pas été versé dans le délai supplémentaire fixé. Devant le Tribunal fédéral, le recourant demande le renvoi à la Cour d'appel civile pour qu'elle entre en matière sur le fond; il prétend avoir été sans sa faute empêché de payer cette mensualité à temps et se réfère à l'<ref-law> relatif à la restitution de délai. Conformément à la règle de l'épuisement des instances cantonales, un tel grief devait être soulevé en priorité dans une requête en restitution de délai adressée à l'autorité cantonale qui a rendu la décision d'irrecevabilité (<ref-law>). En tant qu'il tend à la restitution du délai, le recours en matière civile est dès lors irrecevable.
1.4. En application de l'<ref-law>, il convient en principe de transmettre la cause à l'autorité compétente, qui peut être une autorité cantonale (cf. <ref-ruling> consid. 2 p. 47).
La question se pose de savoir si une telle transmission est utile en l'espèce, dans la mesure où le recourant lui-même prétend qu'il aurait requis le relevé du défaut dans son courrier du 31 juillet 2017 et que sa requête aurait été rejetée par la Juge déléguée le 4 août 2017 (cf. arrêt précité du 25 mars 2013 consid. 2). A l'examen, il s'avère que dans sa communication du 4 août 2017, la Juge déléguée ne se prononce d'aucune manière sur le caractère fautif ou non de l'empêchement au sens de l'<ref-law>, l'accident du 20 juin 2017 n'étant du reste évoqué qu'incidemment dans la lettre du 31 juillet 2017. On ne saurait dès lors considérer que le recourant a déjà saisi l'autorité cantonale d'une requête en restitution du délai, qui aurait été rejetée. La cause sera transmise à la Cour d'appel civile comme objet de sa compétence.
2.
Les conclusions du recours, manifestement irrecevable, étaient d'emblée vouées à l'échec, de sorte que la demande d'assistance judiciaire du recourant doit être rejetée (<ref-law>).
Le recourant, qui succombe, prendra à sa charge les frais de la procédure (<ref-law>). Comme les intimés n'ont pas été invités à déposer une réponse, il n'y a pas lieu de leur allouer des dépens (<ref-law>), leur requête de sûretés en garantie des dépens étant au surplus sans objet.

Par ces motifs, le Tribunal fédéral prononce:
1.
Le recours est irrecevable.
2.
L'écriture du 14 septembre 2017 du recourant est transmise, avec le bordereau de la même date, à la Cour d'appel civile du canton de Vaud pour être traitée comme une requête en restitution de délai.
3.
La demande d'assistance judiciaire déposée par le recourant est rejetée.
4.
La demande de sûretés en garantie des dépens déposée par les intimés est sans objet.
5.
Les frais judiciaires, arrêtés à 1'000 fr., sont mis à la charge du recourant.
6.
Le présent arrêt est communiqué aux mandataires des parties et à la Cour d'appel civile du Tribunal cantonal du canton de Vaud.
Lausanne, le 22 mai 2018
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente : Kiss
La Greffière : Godat Zimmermann